vue: 定义组件template

vue渲染文档除了html模版之外,还有template和render,我们来了解一下template。

基础使用方法:

注意的点:

  1. 会覆盖之前的dom节点

2. 需要一个根dom节点

        <div id="app">      
</div>
<script>
    new Vue({
        el : "#app",
        template : "<div>{{ name }}<div>123</div></div>",
        // 覆盖dom节点
        // 需要一个根节点
        data : {
            name : "fanghuayong" 
        },
    })
</script>
      

组件化开发的优点:
1.代码复用
2.降低代码偶合性 出问题容易找问题


template渲染多份模版

问题: 一个vue实例只会控制一段html代码

解决: vue是一个构造函数,Vue.component()方法可以解决这个问题

知识点:

  1. 第一参数: 定义组件的名字
  2. 第二参数: 是个对象

全局组件

全局组件可以在vue控制的任意模版下使用

        <div id="app">
    <my-component></my-component>
    <my-component></my-component>
    <my-component></my-component>
</div>
<div id="app2">
</div>
<script>
    Vue.component('my-component', {
         template: "<div>我是全局组件<div>{{ name }}</div></div>",
         // 使用vue.component定义组件
         // 第一参数: 定义组件的名字
         // 第二参数: 是个对象
         // 全局组件: 可以在vue控制的任意模版下使用
         data: function() {
         // data字段必须是函数
              return{
                  name : 'lizhuli'
              }
         }
    })
    new Vue({
        el : "#app",
        data : {
            name : "fanghuayong" 
        },
    })
    new Vue({
        el: '#app2',
        template: '<my-component></my-component>'
    })
</script>
      

局部组件

仅在实例控制的html代码段里可以使用

        new Vue({
    el : "#app",
    data : {
        name : "fanghuayong" 
    },

    // 局部组件
    components: {
    'my-fanghuayong' : {
         template: '<div>这是局部组件</div>'
    }
    }
})

      

注册组件的data字段

必须写函数返回retrun形式,直接写对象会报错

v2-b50663dd084396e6e13adb899bfebd05_b.png
        Vue.component('my-component', {
    template: "<div>我是全局组件组件<div>{{ name }}</div></div>",

    // data字段必须是函数
    data: function() {
        return{
            name : 'data字段必须用函数'
        }
    }
})

      

如果data是一个对象会发生什么?

对象都是引用同一个内存地址,改变一个会发生所有改变

        <div id="app">
    <my-component></my-component>
    <my-component></my-component>
    <my-component></my-component>
    <my-component></my-component>
</div>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<script>
 let data = {
     count : 0
 }
 Vue.component('my-component', {
     template : "<div @click = 'count++'>{{ count }}</div>",
     function() {
         return data;
     }
 })
 new Vue({
     el : "#app",
 })
</script>
      

当++的时候,所有的都在跟在改变

v2-c79ca09776f964b9cdb41ba0ee4b682e_b.jpg
        Vue.component('my-component', {
     template : "<div @click = 'count++'>{{ count }}</div>",
     data : function() {
     return {
         count : 0
     }
     }
})

      

v2-847a196fa8b23a0f8a6d48356cff38d6_b.jpg

如果是内部对象就不会受影响,所以只能使用函数。

命名规范

fanghuayong-alert

fanghuayongAlert

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值