• 组件(0)


    现在前端大谈组件化、模块化、工程化。今天就讲讲vue组件的认识与开发。组件化也是vue最强大的功能之一。

    一、组件开发语法:

    1、创建组件构造器

            //创建组件构造器
            var constructor = Vue.extend({
                template:'<div>hello vue,this is my first component1</div>'
            });

    2、全局注册组件

             //注册组件 全局注册
             Vue.component("cyg-parent",constructor);

    3、组件注册语法糖

    /**********祖册组件语法糖*********/
            //以上两步可以简写成这样
            Vue.component("my-component",{
                template:"<p>test,hi i am a component</p>"
            })
            new Vue({
                el:'#app2'
            })
        //直接在app2的渲染内引用my-component组件

    4、全局注册和局部注册

    Vue.component是全局注册。在任何vue实例下都能使用。要想实现局部注册。利用components属性实现局部注册

            Vue.component("my-component",{
                template:"<p>test,hi i am a component</p>"
            })
            new Vue({
                el:'#app2',
                         //part-component局部注册#app2下面。#app1无法调用会报编译错误
                components:{
                    'part-component': { 
                        template:'<p>hello this is part component</p>'
                    }
                }
            })
            //使用组件  注意:这里的代码的先后顺序,写在最上面是不行的
            new Vue({
                el:'#app1'
                
            })                
    <div id="app1">
            <my-component></my-component>
            <part-component></part-component>
    </div>
        <div id="app2">
            <my-component></my-component>
            <part-component></part-component>
        </div>

    5、父子组件

    组件当中可以存在更多的组件这样就形成了父子组件。由于组件的作用域是孤立的。那么传输数据是怎样的呢?简而言之:参数往下传(props),事件往上传(emit)

    props:

            Vue.component("my-component",{
                data:function(){
                    return {
                        msg:"cygnet..."
                    }
                },
                template:"<p>test,hi i am a component {{ msg }}<span><child-component :parentMsg='msg'></child-component></span></p>",
                components:{
                    'child-component': {
                        props:['parentMsg'],
                        template:'<p>hello this is child component {{ parentMsg }}</p>'
                    }
                }
            })
            new Vue({
                el:'#app2'
            })

    emit:

    Vue.component('button-counter', {
      template: '<button @click="increment">{{ counter }}</button>',
      data: function () {
        return {
          counter: 0
        }
      },
      methods: {
        increment: function () {
          this.counter += 1;
          //侦听事件使用 $on(eventName)
          //定义和触发事件使用 $emit(eventName)
          this.$emit('increment')
        }
      },
    })
    new Vue({
      el: '#app2',
      data: {
        total: 0
      },
      methods: {
        incrementTotal: function () {
          this.total += 1
        }
      }
    })<div id="app2">
    {{ total }}
       <button-counter v-on:increment="incrementTotal"></button-counter>
    <button-counter v-on:increment="incrementTotal"></button-counter>
    </div>

    6、静态组件

    利用v-once指令特性使其成为静态组件

    v-once:只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过。这可以用于优化更新性能

    var vm = new Vue({ el: '#parent',data:{ msg:'cygnet',dd:"11"} })
    vm.dd = "22";
    //写一个例子说明v-once指令
    <div id="parent">
    <!-- 有子元素 -->
    <div v-once>
      <p>{{msg}}</p>
      {{ dd }}
    </div>
      {{ dd }}
    </div>

    Vue.component('terms-of-service', {
      template: '
        <div v-once>
          <h1>Terms of Service</h1>
          ... a lot of static content ...
        </div>
      '
    })

    7.异步组件、动态组件。递归组件等等。。。以后再去了解吧,现在脑中有一个概念就行了。

  • 相关阅读:
    “12306”的架构到底有多牛逼
    数字治理
    浅谈web网站架构演变过程
    MapReduce基本原理
    Flink+Hologres亿级用户实时UV精确去重最佳实践
    全链路压测体系建设方案的思考与实践
    如何做好一场技术演讲?
    “控本焦虑”的工程企业 用钉钉宜搭找到了低成本数字化的“捷径”
    友盟+《小程序用户增长白皮书》:从五个角度入手分析小程序数据
    数字化让618有了洞悉消费者内心的“大脑”
  • 原文地址:https://www.cnblogs.com/cygnet/p/6107955.html
Copyright © 2020-2023  润新知