zoukankan      html  css  js  c++  java
  • Vue 组件注册


    全局组件注册语法

    1.组件注册语法

    Vue.component(组件名称, {
        data: 组件数据,
        template: 组件模板内容
    })
    
          // 注册一个名为 button-counter 的新组件
          Vue.component('button-counter', {
            data: function () {
              return {
                count: 0
              }
            },
            template: '<button v-on:click="count++">点击了{{ count }}次.</button>'
          })
    

    2.组件用法

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

    <!DOCTYPE html>
    <html lang="en">
      <head>
        <meta charset="UTF-8" />
        <title>Document</title>
      </head>
      <body>
        <div id="app">
          <button-counter></button-counter>
          <button-counter></button-counter>
          <button-counter></button-counter>
        </div>
        <script type="text/javascript" src="js/vue.js"></script>
        <script type="text/javascript">
          /* 组件注册 */
          Vue.component('button-counter', {
            data: function () {
              return {
                count: 0,
              }
            },
            template: '<button @click="handle">点击了{{count}}次</button>',
            methods: {
              handle: function () {
                this.count += 2
              },
            },
          })
          var vm = new Vue({
            el: '#app',
            data: {},
          })
        </script>
      </body>
    </html>
    

    组件注册注意事项

    1.data必须是一个函数

    2.组件模板内容必须是单个根元素

    3.组件模板内容可以是模板字符串

      模板字符串需要浏览器提供支持(ES6语法)

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Document</title>
    </head>
    <body>
      <div id="app">
        <button-counter></button-counter>
        <button-counter></button-counter>
        <button-counter></button-counter>
      </div>
      <script type="text/javascript" src="js/vue.js"></script>
      <script type="text/javascript">
        Vue.component('button-counter', {
          data: function(){
            return {
              count: 0
            }
          },
          template: `
            <div>
              <button @click="handle">点击了{{count}}次</button>
              <button>测试123</button>
            </div>
          `,
          methods: {
            handle: function(){
              this.count += 2;
            }
          }
        })
        var vm = new Vue({
          el: '#app',
          data: {}
        });
      </script>
    </body>
    </html>
    

    4.组件命名方式

    • 短横线方式
      Vue.component('my-component', { /* ... */ })
    • 驼峰方式
      Vue.component('MyComponent', { /* ... */ })
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Document</title>
    </head>
    <body>
      <div id="app">
        <button-counter></button-counter>
        <hello-world></hello-world>
      </div>
      <script type="text/javascript" src="js/vue.js"></script>
      <script type="text/javascript">
        /*
          组件注册注意事项
          如果使用驼峰式命名组件,那么在使用组件的时候,只能在字符串模板中用驼峰的方式使用组件,
          但是在普通的标签模板中,必须使用短横线的方式使用组件
        */
        Vue.component('HelloWorld', {
          data: function(){
            return {
              msg: 'HelloWorld'
            }
          },
          template: '<div>{{msg}}</div>'
        });
        Vue.component('button-counter', {
          data: function(){
            return {
              count: 0
            }
          },
          template: `
            <div>
              <button @click="handle">点击了{{count}}次</button>
              <button>测试123</button>
              <HelloWorld></HelloWorld>
            </div>
          `,
          methods: {
            handle: function(){
              this.count += 2;
            }
          }
        })
        var vm = new Vue({
          el: '#app',
          data: {}
        });
      </script>
    </body>
    </html>
    

    局部组件注册

    var ComponentA = { /* ... */ }
    var ComponentB = { /* ... */ }
    var ComponentC = { /* ... */ }
    new Vue({
        el: '#app'
        components: {
           'component-a': ComponentA,
           'component-b': ComponentB,
           'component-c': ComponentC,
        }
    })
    
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Document</title>
    </head>
    <body>
      <div id="app">
        <hello-world></hello-world>
        <hello-tom></hello-tom>
        <hello-jerry></hello-jerry>
        <test-com></test-com>
      </div>
      <script type="text/javascript" src="js/vue.js"></script>
      <script type="text/javascript">
        /*
          局部组件注册
          局部组件只能在注册他的父组件中使用
        */
        Vue.component('test-com',{
          template: '<div>Test<hello-world></hello-world></div>'
        });
        var HelloWorld = {
          data: function(){
            return {
              msg: 'HelloWorld'
            }
          },
          template: '<div>{{msg}}</div>'
        };
        var HelloTom = {
          data: function(){
            return {
              msg: 'HelloTom'
            }
          },
          template: '<div>{{msg}}</div>'
        };
        var HelloJerry = {
          data: function(){
            return {
              msg: 'HelloJerry'
            }
          },
          template: '<div>{{msg}}</div>'
        };
        var vm = new Vue({
          el: '#app',
          data: {},
          components: {
            'hello-world': HelloWorld,
            'hello-tom': HelloTom,
            'hello-jerry': HelloJerry
          }
        });
      </script>
    </body>
    </html>
    

    本文来自博客园,作者:一纸年华,转载请注明原文链接:https://www.cnblogs.com/nullcodeworld/p/15498015.html

  • 相关阅读:
    Ionic开发手机App常用的软件
    Windows的Ionic环境配置
    百度静态资源公共库
    我的程序员之路
    angular.bind
    响应式布局之使用bootstrap
    初识bootstrap
    使用css3实现响应式布局
    mysql-阅读笔记1
    mysql优化
  • 原文地址:https://www.cnblogs.com/nullcodeworld/p/15498015.html
Copyright © 2011-2022 走看看