美文网首页vue复习笔记
VUE复习笔记12(深入研究组件)

VUE复习笔记12(深入研究组件)

作者: XKolento | 来源:发表于2018-09-05 15:23 被阅读7次

    组件注册

    组件名称

    在注册组件的时候,我们始终需要给他一个名字。
    比如在全局注册的时候:

    Vue.component('my-component',{组件代码})
    

    其中的第一个参数就是组件名称,第二个则是组件代码。通常组件代码也会用一个变量表示。

    给组件的名字也依赖于他的用途,建议使用语义化的,使用小写和连字符的形式。这样可以避免与当前与未来的Html冲突。

    你也可以在风格指南中查阅到关于组件名的其它建议。

    组件名大小写

    定义组件名的方法有2种
    ①使用 kebab-case,横线连接符
    当使用 kebab-case (短横线分隔命名) 定义一个组件时,你也必须在引用这个自定义元素时使用 kebab-case,例如 <my-component-name>。

    ②使用 PascalCase,驼峰方式
    当使用 PascalCase (驼峰式命名) 定义一个组件时,你在引用这个自定义元素时两种命名法都可以使用。也就是说 <my-component-name> 和 <MyComponentName> 都是可接受的。注意,尽管如此,直接在 DOM (即非字符串的模板) 中使用时只有 kebab-case 是有效的。

    全局注册

    到目前为止,我们都只是用过 Vue.component来创建组件。

    Vue.component('my-component-name', {
      // ... 选项 ...
    })
    

    这些组件都是全局注册的,也就是说,这些组件在创建出来以后都可以在任何新创建的 Vue 实例中使用。

    Vue.component('component-a', { /* ... */ })
    Vue.component('component-b', { /* ... */ })
    Vue.component('component-c', { /* ... */ })
    
    new Vue({ el: '#app' })
    
    <div id="app">
      <component-a></component-a>
      <component-b></component-b>
      <component-c></component-c>
    </div>
    

    在所有子组件中也是如此,也就是说这三个组件在各自内部也都可以相互使用。

    局部注册

    全局注册往往是不够理想的,比如你想用一个像webpack这样的构建系统。全局注册所有的组件意味着,意味着你已经不再使用一个组件了,他还是会包含在你的最终构建结果中,这造成了用户下载js无畏的增加。

    在这样的情况下,你可以通过一个普通的js来定义一个组件。

    var ComponentA = { /* ... */ }
    var ComponentB = { /* ... */ }
    var ComponentC = { /* ... */ }
    

    然后在components选项中定义所需要的插件:

    new Vue({
      el: '#app'
      components: {
        'component-a': ComponentA,
        'component-b': ComponentB
      }
    })
    

    对于components对象中的每个属性来说,其属性名就是自定义 元素/组件 的名字,他的值就是这个组件的选项对象。

    注意,局部注册的组件在他的子组件中不可使用。
    也就是如上的例子,
    componentAcomponentB中不可使用,
    如果你希望 ComponentAComponentB中可用,则你需要这样写:

    var ComponentA = { /* ... */ }
    
    var ComponentB = {
      components: {
        'component-a': ComponentA
      },
      // ...
    }
    

    或者如果你通过 Babel 和 webpack 使用 ES2015 模块,那么代码看起来更像:

    import ComponentA from './ComponentA.vue'
    
    export default {
      components: {
        ComponentA
      },
      // ...
    }
    

    注意在 ES2015+ 中,在对象中放一个类似 ComponentA 的变量名其实是 ComponentA: ComponentA 的缩写,即这个变量名同时是:

    用在模板中的自定义元素的名称
    包含了这个组件选项的变量名

    模块系统

    如果你没有通过 import/require 使用一个模块系统,也许可以暂且跳过这个章节。如果你使用了,那么我们会为你提供一些特殊的使用说明和注意事项。

    在模块系统中局部注册

    我们推荐在项目文件夹中创建一个 components 目录,并将每个组件放置在他响应的文件夹中。

    然后我们需要在局部注册或者全局注册之前,导入这个组件。

    import ComponentA from './ComponentA'
    import ComponentC from './ComponentC'
    
    export default {
      components: {
        ComponentA,
        ComponentC
      },
      // ...
    }
    

    现在 ComponentA 和 ComponentC 都可以在 ComponentB 的模板中使用了。

    相关文章

      网友评论

        本文标题:VUE复习笔记12(深入研究组件)

        本文链接:https://www.haomeiwen.com/subject/oqyawftx.html