VUE2 组件

一、 全局组件

组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。

组件其实也是一个 vue 的实例,包含 datacomputedmethods 等属性,也包含了完整的生命周期函数。 因此,使用组件化其实就是多个 vue 的实例的组合和相互作用。

1. 全局注册

全局组件不需要在 vue 实例里面注册可以直接使用

  1. 注册全局组件的代码必须写在 vue 实例化之前。
  2. 组件命名要注意,如果是小驼峰法,在 html 调用时不识别大小写,要改成横杠写法。
  3. 组件内部的 data 必须是函数。
<div id="app">
  <my-component></my-component>
</div>
Vue.component("my-component", {
  // 选项
  template: "<div>{{msg}}</div>",
  data() {
    return {
      msg: "BGG神教,一统江湖"
    };
  }
});
var app = new Vue({
  el: "#app",
  data: {}
});

二、 局部组件

要清楚组件的性质,可以认为一个组件就是一个 vue 实例。

1. 局部注册

  1. 局部组件被正确调用,必须在 vue 实例里面注册。
  2. html 不识别大小写,调用时横杠写法命名。
  3. 命名不要用系统标签名,例如:header,footer 等。
  4. 组件绑定 is 属性可以实现动态组件。
<div id="app">
  <child></child>
</div>
var child = {
    // 选项
    template:"<div>{{msg}}</div>",
    data(){
        return {
             msg:"BGG神教,一统江湖" ,
        }
     }
}

new Vue({
    el:"#app",
    components:{//必须注册
        child,
    },
})
使用 is 属性实现动态组件,选项卡切换效果

解析 DOM 模板时的注意事项

有些 HTML 元素,诸如 <ul><ol><table><select>,对于哪些元素可以出现在其内部是有严格限制的。而有些元素,诸如 <li><tr><option>,只能出现在其它某些特定的元素内部。

这会导致我们使用这些有约束条件的元素时遇到一些问题。例如:

<table>
  <blog-post-row></blog-post-row>
</table>

这个自定义组件 会被作为无效的内容提升到外部,并导致最终渲染结果出错。幸好这个特殊的 is 特性给了我们一个变通的办法:

<table>
  <tr is="blog-post-row"></tr>
</table>

需要注意的是如果我们从以下来源使用模板的话,这条限制是不存在的:

  • 字符串 (例如:template: '...')

  • 单文件组件 (.vue)

  • <script type="text/x-template">

Last Updated:
Contributors: zerojs