【day 06】vue的组件

这篇具有很好参考价值的文章主要介绍了【day 06】vue的组件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

组件

组件就是把一个网页分割成独立的小的模块,然后通过把模块进行组合,构建成一个大型的应用
【day 06】vue的组件

单文件组件 只有一个组件 html css js 都在这个文件内
非单文件组件 可有多个组件
全局注册
!! 得先注册子组件 再生成 vm实例对象 
创建子组件  
const child = Vue.extend({
      //除了 el 其他任意配置项都可以用  
      name: 'child',
      data() {
        return {
          msg: 123
        }
      },
      // 写组件的html内容 
      template: `<h1>我是child子组件</h1>`
    })

//全局注册子组件  自定义组件名  组件对象  
    Vue.component('child', child)

    const vm = new Vue({
      name: 'app',
      el: '#app',
      data() {
        return {}
      }
    })

语法糖的写法 省略 Vue.extend() 在使用 child组件时 内部会自己调用

const child = {
      name: 'child',
      data() {
        return {
          msg: 123
        }
      },
      // 写组件的html内容 
      template: `<h1>我是child子组件</h1>`
    }
   Vue.component('child', child)

view model  vm new Vue() 产生的  老大哥 管理一切 小弟 

子组件实例对象  简称 vc  
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
     
    </style>
</head>
<body>
    <div id="app">
            <child></child>
            <child></child>
            <child></child>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
   <script>

    //    得先注册子组件  再生成vm实例对象
    // 创建子组件
       const child = Vue.extend({
        // 除了el其他任意配置项都可以用
        name:'child',
        data(){
            return{
                msg:123
            }
        },
        //写组件的html内容
        template:`<h1>我是child子组件</h1>`

       })
    //    全局注册子组件  自定义组件名  组件对象
       Vue.component('child',child)
       const vm = new Vue({
           el:"#app",
           data(){
               return{
                   bool:true,
               }
           },
           methods: {
          

           }
        
       })
       console.log(vm)
   </script>
</body>
</html>

注意:子组件内 data 只能是函数 不能是对象的写法

全局注册组件 任意的组件内都可以使用此组件
我们期望 组件直供 某一个组件使用 需要使用局部注册
  new Vue({
           el:"#box",
           data(){
               return{
                
               }
           },
           methods: {


           },
           components:{
             child
           }
        
       })
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
     
    </style>
</head>
<body>
    <div id="app">
    <child></child>
    </div>
    <div id="box">
        <p>我现在是在box下</p>
        <child></child>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
   <script>
    const child = Vue.extend({
        name:'Child'
        data(){
            return{

            }
        },
        methods:{

        },
        template:`<h1>我是儿子组件<h1>`
    })
    // Vue.component('child',child) 关闭全局注册

       new Vue({
           el:"#app",
           data(){
               return{
                   bool:true,
               }
           },
           methods: {
          

           }
        
       })
       
       new Vue({
           el:"#box",
           data(){
               return{
                
               }
           },
           methods: {


           },
           components:{
             child
           }
        
       })

   </script>
</body>
</html>

最好是配置上name属性 name写的是啥 浏览器工具内 组件的位置就显示啥 最好是 组件名 保持一致 首字母大写

name:'child'
自定义标签名命名
  1. 不能跟已有的标签发生冲突
  2. 子组件命名 使用时 写成
    vue2 非单文件组件为:
    components:{
    childDemo:child
    }
    会被转为 小写识别 就会报错 childdemo
    我们需要更换成 这种写法
模板的规定

vue2内
template内 只能接收一个根元素

template:
`
//这样子写会报错

我是儿子组件


我是儿子组件/

        `
  需要改成           

template:
<div> <h2>我是儿子组件</h2> <h2>我是儿子组件</h2> </div>
vue3内不存在这个问题 可以接收多个根元素

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
     
    </style>
</head>
<body>
    <div id="app">
    <!-- <child></child> -->
    </div>
    <div id="box">
        <p>我现在是在box下</p>
        <child-demo></child-demo>
    </div>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
   <script>
    const child = Vue.extend({
        name:'child',
        data(){
            return{

            }
        },
        methods:{

        },
        template:
        ` <div>
         <h2>我是儿子组件</h2>
         <h2>我是儿子组件</h2>   
        </div> `
    })
    // Vue.component('child',child) 关闭全局注册

       new Vue({
           el:"#app",
           data(){
               return{
                   bool:true,
               }
           },
           methods: {
          

           }
        
       })
       
       new Vue({
           el:"#box",
           data(){
               return{
                
               }
           },
           methods: {


           },
           components:{
             childDemo:child
           }
        
       })

   </script>
</body>
</html>
组件的嵌套

全局注册

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
     
    </style>
</head>
<body>
    <div id="app">
    <child></child>
    </div>
  
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
   <script>
    const  moLeft =  {
        name:'MoLeft',
        template:`<h2 style='float:left;background:red;'>我是左边的组件</h2>`
    }
    const child = Vue.extend({
        name:'child',
        data(){
            return{

            }
        },
        methods:{

        },
        template:
        ` 
        <div>
         <h1>我是儿子组件</h1>
         <mo-left>  </mo-left>
         </div>  
        `
    })
    Vue.component('child',child) 
    Vue.component('moLeft',moLeft) 
    new Vue({
           el:"#app",
           data(){
               return{
                
               }
           },
           methods: {


           },
           components:{
             childDemo:child
           }
        
       })

   </script>
</body>
</html>

局部注册

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
     
    </style>
</head>
<body>
    <div id="app">
    <child></child>
    </div>
  
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
   <script>
    const  moLeft =  {
        name:'MoLeft',
        template:`<h2 style='float:left;background:red;'>我是左边的组件</h2>`
    }
    const child = Vue.extend({
        name:'child',
        data(){
            return{

            }
        },
        methods:{

        },
        template:
        ` 
        <div>
         <h1>我是儿子组件</h1>
         <mo-left>  </mo-left>
         </div>  
        `
        ,
        components:{
           moLeft
        }
    })
    Vue.component('child',child) 
   // Vue.component('moLeft',moLeft) 
    new Vue({
           el:"#app",
           data(){
               return{
                
               }
           },
           methods: {


           },
           components:{
             childDemo:child
           }
        
       })

   </script>
</body>
</html>

分析:
new Vue 产生的是 vm实例对象
Vue.extend() 返回的是 f VueComponent(options) //构造函数
{
this.inint(options)
}

VueComponent 构造函数 组件使用的时候 内部会执行 产出 vc实例对象 (被vm管理的小弟)

vc和vm两个人 配置差不多完全一致
子组件内 this 指向 自己的vc实例对象

单文件组件
<template>
    <div class="father">
        我是父组件
    </div>
</template>

<script>
export default{
    name:"Father",
    data(){
        return{};
    },
};
// export default{} 默认暴露  引用时 import ??? from '????'

// 分别暴露
// export const obj = {};引用时 import {obj} from '?????'
// 等价于暴露出去了
// {
//     obj
// }

// 统一暴露
// let obj = {}
// let obj1 = {}
// import {obj,obj1} from '?????'

</script>
<style lang="sass" scoped></style>

脚手架

Vue官方提供的标准化开发工具(开发平台)
可以把vue文件及相关的ess编译为可执行的html css js

安装

npm i -g @vue/cli 进行安装文章来源地址https://www.toymoban.com/news/detail-461503.html

搭建

到了这里,关于【day 06】vue的组件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue制作一个好看的网页

    1.安装并配置node.js (见本人博客-node.js) 2.建好的项目目录如下   build:  用来存放项目构建脚本 config: 存放项目的一些基本配置信息,最常用的就是端口转发 node_modules:这个目录存放项目的所有依赖,由npm install 下载来的文件 src:存放项目的源码,开发者写的代码 static:用来存放

    2024年02月05日
    浏览(39)
  • 前端Vue入门-day04-用vue实现组件通信

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 组件的三大组成部分 注意点说明 组件的样式冲突 scoped data 是一个函数 组件通信 什么是组件通信 不同的组件关系 和 组件通信方案分类   父子通信流程图:  父 → 子

    2024年02月15日
    浏览(54)
  • 如何在Java中将一个列表拆分为多个较小的列表

    在Java中,有多种方法可以将一个列表拆分为多个较小的列表。在本文中,我们将介绍三种不同的方法来实现这一目标。 List 接口提供了一个 subList() 方法,它可以用来获取列表中的一部分元素。我们可以使用这个方法来将一个列表拆分为多个较小的列表。 下面是一个简单的示

    2024年02月15日
    浏览(40)
  • 前端Vue入门-day08-vant组件库

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 vant 组件库  安装  导入 全部导入 按需导入 浏览器配饰 Viewport 布局 Rem 布局适配  目标:认识第三方 Vue组件库 vant-ui 组件库:第三方 封装 好了很多很多的 组件 ,整合

    2024年02月14日
    浏览(41)
  • 前端Vue入门-day03-用Vue实现工程化、组件化开发

    (创作不易,感谢有你,你的支持,就是我前行的最大动力,如果看完对你有帮助,请留下您的足迹) 目录 生命周期 Vue 生命周期 和 生命周期的四个阶段  Vue 生命周期函数(钩子函数) 案例-create的应用 案例-mounted的应用 工程化开发 脚手架 Vue CLI 开发 Vue 的两种方式 基本介

    2024年02月15日
    浏览(59)
  • Vue学习Day3——生命周期\组件化

    Vue生命周期:就是一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个阶段:① 创建 ② 挂载 ③ 更新 ④ 销毁 1.创建阶段:创建响应式数据 2.挂载阶段:渲染模板 3.更新阶段:修改数据,更新视图 4.销毁阶段:销毁Vue实例 Vue生命周期过程中,会 自动运行一些函数 ,被称

    2024年02月15日
    浏览(47)
  • LLMs之RAG:基于LangChain框架利用ChatGPT的API实现一个与在线网页交互的对话机器人—五大思路步骤—加载文档WebBaseLoader网址文件→文档分割(chunk_size=50

    LLMs之RAG:基于LangChain框架利用ChatGPT的API实现一个与在线网页交互的对话机器人—五大思路步骤—加载文档WebBaseLoader网址文件→文档分割(chunk_size=500)→文本嵌入化(OpenAIEmbeddings)并存储到向量库(Chroma)→构造Prompt(拉取一个对象并将其返回为 LangChain对象)→定义LLMs(ChatOpenAI)→输入

    2024年02月08日
    浏览(52)
  • vue尚品汇商城项目-day03【vue插件-19.mockjs模拟数据(开发Home首页当中的ListContainer组件与Floor组件)】

    安装命令:cnpm install --save mockjs 重难点说明 使用swiper实现静态页面轮播 解决多个swiper冲突的问题 解决swiper动态页面轮播的bug 定义可复用的轮播组件 解决Floor组件中轮播有问题的bug 利用mockjs提供模拟数据 Mockjs: 用来拦截ajax请求, 生成随机数据返回 学习 ​ a. http://mockjs.com/ ​

    2023年04月09日
    浏览(53)
  • 「Vue|网页开发|前端开发」01 快速入门:用vue-cli快速写一个Vue的HelloWorld项目

    本文主要介绍如何用vue开发的标准化工具vue-cli快速搭建一个符合实际业务项目结构的hello world网页项目并理解vue的代码文件结构以及页面渲染流程。 Windows 系统的 node.js 安装十分简易,没有环境安装经验的伙伴可以参考文章:Windows系统下安装node.js 我们需要先创建一个用于放

    2024年02月12日
    浏览(64)
  • 在vue中,一个组件怎么调用另一个组件中的data数据

    在 Vue 中,组件之间的数据通信可以通过 props 和 events 来实现,但是要访问另一个组件中的 data 数据,可以使用 ref。 使用 ref,可以给组件指定一个唯一的名字,然后通过 this.$refs.[ref name] 来访问该组件的所有属性和方法,包括 data 数据。 例如: 在上面的代码中,我们将子组

    2024年02月16日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包