vue component组件

什么是组件

按照惯例,引用Vue官网的一句话:

组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能。在有些情况下,组件也可以是原生 HTML 元素的形式,以 is 特性扩展。

组件component的注册

全局组件:

Vue.component('todo-item',{
    props:['grocery'],
    template:'<li>{{grocery.text}}</li>'
})
var app7 = new Vue({
    el:"#app7",
    data:{
        groceryList:[
            {"id":0,"text":"蔬菜"},
            {"id":1,"text":"奶酪"},
            {"id":2,"text":"其他"}
        ]
    }
})
<div id="app7">
    <ol>
        <todo-item
            v-for="grocery in groceryList"
            v-bind:grocery="grocery"
            v-bind:key="grocery.id">
        </todo-item>
    </ol>
</div>

局部注册:

var Child = {
  template: '<div>A custom component!</div>'
}
new Vue({
  // ...
  components: {
    // <my-component> 将只在父模板可用
    'my-component': Child
  }
})

DOM模板解析说明

组件在某些HTML标签下会受到一些限制。
比如一下代码,在table标签下,组件是无效的。

<table>
  <my-row>...</my-row>
</table>

解决方法是,通过is属性使用组件

<table>
  <tr is="my-row"></tr>
</table>

应当注意,如果您使用来自以下来源之一的字符串模板,将不会受限

<script type="text/x-template">
JavaScript 内联模版字符串
.vue 组件

data使用函数,避免多组件互相影响

html

<div id="example-2">
  <simple-counter></simple-counter>
  <simple-counter></simple-counter>
  <simple-counter></simple-counter>
</div>

js

var data = { counter: 0 }
Vue.component('simple-counter', {
  template: '<button v-on:click="counter += 1">{{ counter }}</button>',
  data: function () {
    return data
  }
})
new Vue({
  el: '#example-2'
})

如上,div下有三个组件,每个组件共享一个counter。当任意一个组件被点击,所有组件的counter都会加一。
解决办法如下
js

Vue.component('simple-counter', {
  template: '<button v-on:click="counter += 1">{{ counter }}</button>',
  data: function () {
    return {counter:0}
  }
})
new Vue({
  el: '#example-2'
})

这样每个组件生成后,都会有自己独享的counter。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值