三. 组件化开发


三. 组件化开发

1. 认识组件化

image-20211116200832552

2. 组件化基础

1> 注册组件

注册的基本步骤

在ES6中``这个可以引用字符串,类似于单引号的作用,但是同时这个是可以换行的,之前单引号的换行,必须要加上一个加号

const  str = '' +
    ''

这个可以不用加加号

const str2 = `

`

组件的使用分成三个步骤:

image-20211116203256484
  • 创建组件构造器
  • 注册组件
  • 使用组件


    
        
        Title
    

    
        
全局和局部组件

当我们通过调用Vue.component()注册组件时,组件的注册是全局的
这意味着该组件可以在任意Vue示例下使用。
如果我们注册的组件是挂载在某个实例中, 那么就是一个局部组件

image-20211116204845263




  
  Title


  • 当全局注册的时候,两个不同的Vue实例都可以使用这个模板

     //注册组件(全局组件,以为着可以在多个vue实例下面使用)
    Vue.component('cpn',cpnC)
    
  • 当局部注册的时候

    components:{
        // cpn是使用组件时的标签名
        cpn:cpnC
    }
    
父组件和子组件

组件构造器1,放在组件构造器2里面注册,这样可以直接在组件2中使用组件1

//2.创建第二个组件(父组件)
    const cpnC2= Vue.extend({
        template: `
      

我是标题2

我是内容

`, components:{ cpn1:cpnC1 } })
  //1.创建第一个组件(子组件)
    const cpnC1 = Vue.extend({
        template: `
      

我是标题1

我是内容

` })

然后把组件构造器2,放到vue的components里面进行注册

 const app = new Vue({
        el: '#app',
        data: {
            message: '你好啊',
        },
        components:{
           // cpn1:cpnC1,
            cpn2:cpnC2
        }
    })

root组件:

const app = new Vue({
el: '#app',
data: {
message: '你好啊',
},
components:{
// cpn1:cpnC1,
cpn2:cpnC2
}
})

这个也可以看成是一个组件,这里面可以写template会替代el,这是最顶层的组件root

在哪里注册,就在哪里使用。

当子组件注册到父组件的components时,Vue会编译好父组件的模块,父组件调用子组件的时候,会现在自己的作用域里面找component,找到的话就会把这些代码替换过去,如果找不到的话,就会到全局的components里面去找。

该模板的内容已经决定了父组件将要渲染的HTML(相当于父组件中已经有了子组件中的内容了)

注册组件语法糖

Vue为了简化这个过程,提供了注册的语法糖。
主要是省去了调用Vue.extend()的步骤,而是可以直接使用一个对象来代替。

注册全局组件:

//2.注册组件
Vue.component('cpn1', {
    template: `
      

我是标题1

我是内容

});

注册局部组件:

//注册局部组件的语法糖
    const app = new Vue({
        el: '#app',
        data: {
            message: '你好啊',

        },
        components: {
            'cpn2': {
                template: `
      

我是标题2

我是内容

` } } })
image-20211124100201026 image-20211124100206888
模板的分离写法

我们通过语法糖简化了Vue组件的注册过程,另外还有一个地方的写法比较麻烦,就是template模块写法。
如果我们能将其中的HTML分离出来写,然后挂载到对应的组件上,必然结构会变得非常清晰。
Vue提供了两种方案来定义HTML模块内容:


使用

使用