zoukankan      html  css  js  c++  java
  • vue的全局指令

    vue有四个全局指令:directive、extent、set、component

    directive:自定义指令

    //写一个改变颜色的指令
    Vue.directive('amie',function(el,binding,vnode){
            el.style='color:'+binding.value;
    });
    
    //HTML
    <div v-amie="'red'"></div>

    可以看出其实指令的实际是操作dom元素,第一个参数就是element,第二个是参数是传给指令的值,第三个。。。。


     extent:作用和组件差不多,但是每次挂载都要new一次在$mount挂载(可以挂载到实例范围以外的地方),不像组件那样可以多次复用不需要new

    var authorExtend = Vue.extend({
        template:"<p><a :href='authorUrl'>{{authorName}}</a></p>",
        data(){
          return{
              authorName:'amie',
              authorUrl:'http://www.qq.com'
           }
        }
    });
    //挂载
    new authorExtend().$mount('.author');
    
    //HTML
    <div class="author"></div>

    set:改变Vue实例data的值

    Vue.set(dataObj,'count',4);

    一般我们会用 vm.data1 = 123 这样来修改,这样没问题

    但是修改的数据是Object类型的属性值,Vue是检测不了变化的(这是受限于js的内部机制)

    例如:vm.dataObj.count = 4来改变值,Vue检测不了dataObj.count的变化从而没办法在dom更新

    这个时候用set就可以告诉Vue改变了data中dataObj的count属性


     component:定义全局组件,在任意Vue实例内都可以使用

    Vue.component('zhangamie',{
        template: `<div>
               {{ name }}
        </div>`,
        data() { 
            return {
                name: '小咩咩'
            }
        }
    })

    mixin:全局混入选项(混入的选项和原来的并存)

    Vue.mixin({
        data() {
            return {
                newData: 999
            }
        }
    })

    以后所有新建的Vue实例都会在它们的data里面混进这个newData,但是如果这个newData在实例中再次被定义,会被实例中的data覆盖

    先后顺序是:全局的mixin-->局部-->原生的mixin,顺序后的会覆盖顺序前的(覆盖只会覆盖选项内部的值,不会覆盖整个选项)

  • 相关阅读:
    Browse information of one or more files is not available解决办法
    python中装饰器的使用
    python:匿名函数lambda
    python:列表生成式的学习
    python:列表切片知识的总结
    python:*args和**kwargs的用法
    NAT
    ACL
    三层交换技术和HSRP协议
    单臂路由与DHCP中继
  • 原文地址:https://www.cnblogs.com/amiezhang/p/8395303.html
Copyright © 2011-2022 走看看