(24)Vue.js组件—组件注册

一、Vue.js组件注册内容

• 全局注册 • 组件基础 • 局部注册

二、全局注册

• 全局注册的组件在注册后可以用于任意实例或组件中。

<body>
  <div id="app">
    <p>这是p标签</p>
    <my-component></my-component>
  </div>
  <script src="./vue.js"></script>
  <script>
    // 语法:  Vue.component('my-component',{选项对象});
    Vue.component('my-component',{
      template: '<div>这是我们全局注册的组件</div>'
     })
    new Vue({
      el:'#app',
      data: {

      }
    })
  </script>
</body>

• 注意:全局注册必须设置在根 Vue 实例创建之前。

三、组件基础

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

组件基础主要学习内容:• 组件命名规则 • template 选项 • data 选项

3.1组件命名规则

• 组件具有两种命名规则:
• kebab-case:'my-component’  驼峰命名法
• PascalCase:'MyComponent'  帕斯卡命名法

• 注意:无论采用哪种命名方式,在 DOM 中都只有 kebab-case 可以使用。

示例:我们再视图中使用组件的时候,不能够使用帕斯卡命名法去书写,否则会报错。

<body>
  <div id="app">
    <my-com-a></my-com-a>
    <!-- <MyComA></MyComA> -->
    <my-com-b></my-com-b>
    <!-- <MyComB></MyComB> -->
  </div>
  <script src="../01.TodoMVC/todomvc-app-template/node_modules/vue/dist/vue.js"></script>
  <script>
    //kebab-case进行注册 (驼峰命名法)
    Vue.component('my-com-a', {
      template: '<div>这是a组件的内容</div>'
    })
    //pascalCase进行注册 (帕斯卡命名法)
    Vue.component('MyComB', {
      template: '<div>这是b组件的内容</div>'
    })
    new Vue({
      el: '#app'
    })
  </script>
</body>

 3.2template选项

• template 选项用于设置组件的结构,最终被引入根实例或其他组件中。

• 注意:组件必须只有一个根元素。如果出现同级的根元素就会出现报错情况。

<body>
  <!-- 挂载元素 -->
  <div id="app">
    <my-com-a></my-com-a>
  </div>
  <script src="../01.TodoMVC/todomvc-app-template/node_modules/vue/dist/vue.js"></script>
  <script>
    Vue.component('MyComA', {
      template: `
        <div>
          <h1>组件 A 的标题内容</h1>
        </div>
        <div>
          <h1>组件 A 的标题内容</h1>
        </div>
      `
    });
    new Vue({
      el: '#app'
    })
  </script>
</body>

3.3data选项

• data 选项用于存储组件的数据,与根实例不同,组件的 data 选项必须为函数,数据设置在返回值对象中。

<body>
  <!-- 挂载元素 -->
  <div id="app">
    <my-com-a></my-com-a>
    <my-com-a></my-com-a>
    <my-com-a></my-com-a>
  </div>
  <script src="../01.TodoMVC/todomvc-app-template/node_modules/vue/dist/vue.js"></script>
  <script>
    Vue.component('MyComA',{
      template: `
      <div>
        <h3> {{ title }} </h3>
        <p>  {{content}}  </p>
      </div>
      `,
      // data() {} 简写形式
      data: function () {
        return {
          title: '这是组件A的标题',
          content: '这是组件A的内容'
        }
      }
    });
    new Vue({
      el: '#app',
      data: {

      }
    })
  </script>
</body>

data参数使用函数的实现方式,是为了确保每个组件实例可以维护一份被返回对象的独立的拷贝,不会相互影响。

通过如下使用DevTools插件,我们可以选择一个组件进行数据修改,发现我们多次调用的组件,再修改的时候,只会更改自身选中的组件,其他的同名的组件不会随之变化,受到影响。

四、局部注册

• 局部注册的组件只能用在当前实例或组件中。

<body>
  <div id="app">
    <my-com-a></my-com-a>
    <my-com-b></my-com-b>
  </div>
  <script src="vue.js"></script>
  <script>
    new Vue({
      el: '#app',
      data: {

      },
      components: {
        'my-com-a': {
          templata: `
            <div>
              <h3>{{ title }}</h3>
              <p>{{ content }}</p>
            </div>
          `,
          data: function () {
            return {
              title: '这是组件A的标题',
              content: '这是组件A的内容'
            }
          }
        },
        'my-com-b': {
          templata: `
            <div>
              <h3>{{ title }}</h3>
              <p>{{ content }}</p>
            </div>
          `,
          data: function () {
            return {
              title: '这是组件B的标题',
              content: '这是组件B的内容'
            }
          }
        }
      }
    })
  </script>
</body>

单独配置组件的选项对象:

<body>
  <div id="app">
    <my-com-a></my-com-a>
    <my-com-b></my-com-b>
  </div>
  <script src="vue.js"></script>
  <script>
    let MyComA = {
          templata: `
            <div>
              <h3>{{ title }}</h3>
              <p>{{ content }}</p>
            </div>
          `,
          data: function () {
            return {
              title: '这是组件A的标题',
              content: '这是组件A的内容'
            }
          }
        };
    let MyComB =  {
          templata: `
            <div>
              <h3>{{ title }}</h3>
              <p>{{ content }}</p>
            </div>
          `,
          data: function () {
            return {
              title: '这是组件B的标题',
              content: '这是组件B的内容'
            }
          }
        };
    new Vue({
      el: '#app',
      data: {

      },
      components: {
        'my-com-a': MyComA,
        'my-com-b': MyComB
      }
    })
  </script>
</body>

ES6 的对象属性简写: 

new Vue({
      el: '#app',
      data: {

      },
      components: {
        MyComA,
        MyComB
      }
    })
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泽哥ins

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值