自定义组件
有时候有一组html
结构的代码,并且这个上面可能还绑定了事件。然后这段代码可能有多个地方都被使用到了,如果都是拷贝来拷贝去,很多代码都是重复的,包括事件部分的代码都是重复的。那么这时候我们就可以把这些代码封装成一个组件,以后在使用的时候就跟使用普通的html
元素一样,拿过来用就可以了。
基本使用:
<div id="app">
<button-counter></button-counter>
<button-counter></button-counter>
<button-counter></button-counter>
</div>
<script>
Vue.component('button-counter', {
data: function(){
return {
count: 0
}
},
template: '<button v-on:click="count++">点击了{{ count }}次</button>'
});
let vm = new Vue({
el: "#app",
data: {}
});
</script>
以上我们创建了一个叫做button-counter
的组件,这个组件实现了能够记录点击了多少次按钮的功能。后期如果我们想要使用,就直接通过button-counter
使用就可以了。然后因为组件是可复用的Vue
实例,所以它们与new Vue
接收相同的选项,例如data
、computed
、watch
、methods
以及生命周期钩子
等。仅有的例外是像el
这样根实例特有的选项。另外需要注意的是:组件中的data必须为一个函数!
给组件添加属性:
像原始的html
元素都有自己的一些属性,而我们自己创建的组件,也可以通过prop
来添加自己的属性。这样别人在使用你创建的组件的时候就可以传递不同的参数了。示例代码如下:
<div id="app">
<blog-post v-for="blog in blogs" :title="blog.title"></blog-post>
</div>
<script>
Vue.component('blog-post', {
props: ['title'],
template: '<h3>{{ title }}</h3>'
})
new Vue({
el: "#app",
data: {
blogs: [
{"title":"钢铁是怎样练成的?","id":1},
{"title":"AI会毁灭人类吗?","id":2},
{"title":"如何学好Vue!","id":3},
]
}
});
</script>
单一根元素:
如果自定义的组件中,会出现很多html元素,那么根元素必须只能有一个,其余的元素必须包含在这个根元素中。比如以下是一个组件中的代码,会报错:
<h3>{{ title }}</h3>
<div v-html="content"></div>
我们应该改成:
<div class="blog-post">
<h3>{{ title }}</h3>
<div v-html="content"></div>
</div>
网友评论