十日谈 :Vue 中的组件化开发

欢迎阅读我的Vue学习日记

什么是组件化

组件化是一种高效的处理复杂应用系统,更好的明确功能模块作用的方式。
讲一个页面拆分为一个个小的功能块,每个功能块完成属于自己这部分独立的功能,那么之后整个页面的管理和维护就会变得非常容易了。

Vue的组件化思想

1.他提供了一种抽象,让我们可以开发出一个个独立可复用的小组件来构造我们的应用。
2.任何的应用都会被抽象成一棵组件树。

注册组件的步骤

1.创建组件构造器
2.注册组件
3.使用组件

在这里插入图片描述

组件化的基本使用

1.创建组件构造器对象

  const cpnC = Vue.extend({
    template:`
    <div>
    <h2>我是标题</h2>
    <p>我是内容</p>
    </div>`
  })

注意这里使用``(Tab键上方按键)代替 ‘’,因为前者可以换行

2.注册组件

Vue.component('cpn',cpnC)

第一个参数是你要使用这个模块时的名字即组件标签名,第二个参数是这个模块声明时的组件构造器

全局组件和局部组件

1.全局组件:
上一章构建组件的方式就是构建的全局组件
全局组件意味着可以在多个Vue实例下面使用

2.局部组件:
当你在某个Vue实例下面注册的时候,注册的就是局部组件

 const app = new Vue({
    el:'#app',
    data:{
      message:'Hello Vue'
    },
    components:{
      cpn:cpnC
    }
  })

cpn是组件标签名,cpnC是组件构造器

父组件与子组件

<script>
  const cpnC1 = Vue.extend({
    template:`
    <div>
      <h2>我是标题</h2>
      <p>我是内容</p>
    </div>
    `
  })
  const cpnC2 = Vue.extend({
    template:`
    <div>
      <h2>我是标题</h2>
      <p>我是内容</p>
      <cpn1></cpn1>
    </div>
    `,
    components:{
      cpn1:cpnC1
    }
  })

  const app = new Vue({
    el:'#app',
      data:{
        message:'Hello Vue'
    },
    components: {
      cpn2:cpnC2
    }
  })
</script>

组件构造器cpn1放在组件构造器cpn2里面注册,而组件cpn2放在vue实例里面进行了注册,这样可以保证两个都使用过了。
在这个过程中:
cpn2作为父组件,cpn2作为子组件
vue实例也可以当做一个最顶层的组件

父子组件的错误用法:
1.因为当子组件注册到父组件的components时,Vue会编译好父组件的模块。
2.该模块的内容已经决定了父组件将要渲染的HTML(相当于父组件中已经有了子组件中的内容)
3.< child-cpn >这种用法是只能在父组件中被识别的。
4.类似这种用法,< child-cpn >是会被浏览器忽略的。

注册组件的语法糖

  Vue.component('cpn1',{
    template:`
      <div>
       <h2>我是标题2</h2>
       <p>我是内容2</p>
    </div>
    `
  })

无需单独写const cpnC = Vue.extend()
直接在注册组件中声明组件

局部组件:

const app = new Vue({
    el:'#app',
      data:{
        message:'Hello Vue'
      },
      components:{
      'cpn2':{
        template: `
        <div>
          <h>我是cpn2</h>
        </div>
        `
      }
      }
  })

组件模板的抽离写法

因为在template里面写html非常麻烦,所以这里介绍两种写法
第一种:
使用的关键语句是这样的:<script type="text/x-template" id="cpn">

<div id="app">
  <cpn></cpn>
</div>
<script type="text/x-template" id="cpn">
  <div>
    <h2>我是标题</h2>
    <p>我是内容</p>
  </div>
</script>
<script src="../js/vue.js"></script>
<script>
  Vue.component('cpn',{
    template:'#cpn'
  })

  const app = new Vue({
    el:'#app',
      data:{
        message:'Hello Vue'
    }
  })
</script>

第二种:
也可以使用template标签来写:

<template id="cpn">
  <div>
    <h2>我是template标签</h2>
  </div>
</template>
<script src="../js/vue.js"></script>
<script>
  Vue.component('cpn',{
    template:'#cpn'
  })

为什么组件data必须是函数

组件是一个单独功能的模块:
这个模块有属于自己的HTML模板,也应该有属于自己的数据data
Vue组件应该有自己保存数据的地方:
1.组件对象也有一个data属性
2.知识这个data属性必须是一个函数
3.而且这个函数返回一个对象,对象内部保存着数据

<template id="cpn">
  <div>
    <h2>我是template标签</h2>
    <p>{{title}}</p>
  </div>
</template>
<script src="../js/vue.js"></script>
<script>
  Vue.component('cpn',{
    template:'#cpn',
    data(){
      return{
        title:'数据显示出来了'
      }
    }
  })

  const app = new Vue({
    el:'#app',
      data:{
        message:'Hello Vue'
    }
  })
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值