Vue 组件(一)

一、概念

        首先我们先看一个Vue组件的实例

<div id="app">
    <counter></counter>
</div>
<script>

// 定义一个名为 counter 的新组件
Vue.component('counter', {
  data: function () {
    return {
      count: 0
    }
  },
  template: '<button @click="count++">你点击了 {{ count }} 次.</button>'
})
new Vue({ el: '#app' })
</script>

        组件是可复用的 Vue 实例,且拥有名字,可以作为自定义元素来使用

        注意:

        因为组件是可复用的 Vue 实例,所以它们与 new Vue 接收相同的选项,例如 datacomputedwatchmethods 以及生命周期钩子等。仅有的例外是像 el 这样根实例特有的选项

二、组件的复用

你可以将组件进行任意次数的复用:

<div id="app">
    <counter></counter>
    <counter></counter>
    <counter></counter>
</div>

注意:

        1、当点击按钮时,每个组件都会各自独立维护它的 count。因为你每用一次组件,就会有一个它的新实例被创建。 

        2、组件内 data 必须为一个函数,如果不是函数,点击一个按钮就可能会影响到其它所有实例。

三、注册组件

   1.组件名

 在注册一个组件的时候,我们始终需要给它一个名字。在上面的示例中我们看到:

Vue.component('counter', { /* ... */ })

其中 counter 就是我们这个组件的组件名 。组件名就是 Vue.component 的第一个参数

我们为组件命名时推荐使用 W3C 规范中的自定义组件名 (字母全小写且必须包含一个连字符)

 2.组件名的大小写

        我们为组件命名时会有两种情况:

a. kebab-case (短横线分隔命名)

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

  当使用 kebab-case 定义一个组件时,你也必须在引用这个自定义元素时使用 kebab-case,例如 <my-component-name>

b. PascalCase (首字母大写命名)

Vue.component('MyComponentName', { /* ... */ })

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

3.全局注册

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

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

 这些组件是全局注册的。也就是说它们在注册之后可以用在任何新创建的 Vue 根实例 (new Vue) 的模板中。例如:

Vue.component('btn-a', { /* ... */ })
Vue.component('btn-b', { /* ... */ })
Vue.component('btn-c', { /* ... */ })

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

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

4.局部注册

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

在这些情况下,你可以通过一个普通的 JavaScript 对象来定义组件:

var A = { /* ... */ }
var B = { /* ... */ }
var C = { /* ... */ }

然后在 components 选项中定义你想要使用的组件:

new Vue({
  el: '#app',
  components: {
    'a':A,
    'b':B,
    'c':C,
  }
})

注意   局部注册的组件在其子组件中不可用。例如,如果你希望 A 在 B 中可用,则你需要这样写:

var A = { /* ... */ }

var B = {
  components: {
    'a': A
  },
  // ...
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值