什么是组件?
组件(Component)是vue.js最强大的功能。组件可以扩展HTML元素,封装可重用的代码。在较高层面上,组件是自定义元素,vue.js编译器为他添加特殊功能。在有些情况下,组件也可表现为用is特性扩展了原生的HTML元素。
所有的vue组件同时也是vue的实例,所以可以接受一些相同的选项对象(除了一些根级特有的选项)并提供相同的生命周期钩子。
使用组件
#全局注册
我们已经知道,我们可以通过以下方式创建一个vue的实例:
new vue({
el:'#some-element',
//选项
})
要注册一个全局组件可以使用vue.component(tagName,option).
eg:
vue.component('my-component',
{
//选项
})
!!!!!!请注意,对于自定义标签的命名 Vue.js 不强制遵循 W3C 规则 (小写,并且包含一个短杠),尽管这被认为是最佳实践。
组件在注册以后,便可以作为自定义元素<my-component></my-component>在一个实例的模板中使用。注意确保在初始化根实例前注册组件。
<div id="example"> <my-component></my-component> </div>
// 注册
Vue.component('my-component', {
template: '<div>A custom component!</div>'
})
// 创建根实例
new Vue({
el: '#example'
})
渲染为:
<div id="example"> <div>A custom component!</div> </div>
#局部注册
你不必把每个组件都注册到全局。你可以通过某个 Vue 实例/组件的实例选项 components
注册仅在其作用域中可用的组件:
var Child = {
template: '<div>A custom component!</div>'
}
new Vue({
// ...
components: {
// <my-component> 将只在父组件模板中可用
'my-component': Child
}
})
#DOM模板解析注意事项
当使用DOM模板时(例如,使用el选项来把Vue实例挂载到一个已有内容的元素上),你会受到HTML本身的一些限制,因为vue只有在浏览器解析,规范化模板之后才能获取其内容。尤其要注意像<ul>,<ol>,<table>,<select>这样的元素里允许包含的元素有限制,而另一些像option这样的元素只能出现在某些特定元素的内部。
在自定义组件中,使用一些受限制的元素时,会导致一些问题,例如:
<table>
<my-row>……</my-row>
<table>
自定义的组件会被当做无效的内容,因此会导致错误的渲染结果。变通的方案是使用特殊的is特性。
<table>
<tr is="my-row"></tr>
</table>
应当注意,如果使用以下来源之一的字符串模板,则没有这些限制:
<script type="text/x-template">
JavaScript 内联模板字符串
.vue 组件
因此请尽可能使用字符串模板。