vue复习笔记

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

2018-09-05  本文已影响7人  XKolento

组件注册

组件名称

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

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 的模板中使用了。

上一篇 下一篇

猜你喜欢

热点阅读