Vue学习笔记——全局API

第1节:Vue.directive 自定义指令

{{num}}
// Js:
Vue.directive('jspang',function(el,binding,vnode){
    el.style='color:'+binding.value;
});

var app=new Vue({
    el:'#app',
    data:{
        num:10,
        color:'green'
    },
    methods:{
        add:function(){
            this.num++;
        }
    }
})

自定义指令中传递的三个参数

el: 指令所绑定的元素,可以用来直接操作DOM。
binding:  一个对象,包含指令的很多信息。(binding.expression、binding.value、binding.name...)
vnode: Vue编译生成的虚拟节点。

自定义指令的生命周期

// 自定义指令有五个生命周期(也叫钩子函数),分别是 bind,inserted,update,componentUpdated,unbind
1.bind:只调用一次,指令第一次绑定到元素时调用,用这个钩子函数可以定义一个绑定时执行一次的初始化动作。
2.inserted:被绑定元素插入父节点时调用(父节点存在即可调用,不必存在于document中)。
3.update:被绑定于元素所在的模板更新时调用,而无论绑定值是否变化。通过比较更新前后的绑定值,可以忽略不必要的模板更新。
4.componentUpdated:被绑定元素所在模板完成一次更新周期时调用。
5.unbind:只调用一次,指令与元素解绑时调用。

Vue.directive('jspang',{
    bind:function(){//绑定
         console.log('1 - bind');
    },
    inserted:function(){//绑定到节点成功
         console.log('2 - inserted');
    },
    update:function(){//组件更新
         console.log('3 - update');
    },
    componentUpdated:function(){//组件更新完成
         console.log('4 - componentUpdated');
    },
    unbind:function(){//解绑
         console.log('5 - unbind');
    }
}

第2节:Vue.extend构造器的延伸

Vue.extend 返回的是一个“扩展实例构造器”,也就是预设了部分选项的Vue实例构造器。经常服务于Vue.component用来生成组件,可以简单理解为当在模板中遇到该组件名称作为标签的自定义元素时,会自动调用“扩展实例构造器”来生产组件实例,并挂载到自定义元素上。

vue.extend-扩展实例构造器


// 自定义标签法
// 挂载到普通标签上

第3节:Vue.set全局操作

Vue.set 的作用就是在构造器外部操作构造器内部的数据、属性或者方法。

比如在vue构造器内部定义了一个count为1的数据,我们在构造器外部定义了一个方法,要每次点击按钮给值加1.就需要用到Vue.set。

什么是外部数据,就是不在Vue构造器里里的data处声明,而是在构造器外部声明,然后在data处引用就可以了。

外部数据的加入让程序更加灵活,我们可以在外部获取任何想要的数据形式,然后让data引用。

//在构造器外部声明数据
var outData={
    count:1,
    goodName:'car'
};
var app=new Vue({
    el:'#app',
    //引用外部数据
    data:outData
})
// 使用Vue.set改变其值:
function add(){
       Vue.set(outData,'count',4);
}
// 用Vue对象的方法添加
app.count++;
// 直接操作外部数据
outData.count++;

为什么要有Vue.set的存在?

由于Javascript的限制,Vue不能自动检测以下变动的数组。

  • 当你利用索引直接设置一个项时,vue不会为我们自动更新。

  • 当你修改数组的长度时,vue不会为我们自动更新。

看一段代码:




    
    
    Vue.set 全局操作


    

Vue.set 全局操作


  • {{aa}}

Tip:Vue.set()在methods中也可以写成this.$set()

第4节:Vue的生命周期(钩子函数)

                              Vue学习笔记——全局API_第1张图片

methods:{
    jia:function(){
        this.message ++;
    }
},
// 生命周期函数(钩子函数)放在与data、methods同级摆放
beforeCreate:function(){
    console.log('1-beforeCreate 初始化之后');
},
created:function(){
    console.log('2-created 初始化完成');
},
beforeMount:function(){
    console.log('3-beforeMount 挂载之前');
},
mounted:function(){
    console.log('4-mounted 被挂载');
},
beforeUpdate:function(){
    console.log('5-beforeUpdate 数据更新前');
},
updated:function(){
    console.log('6-updated 被更新后');
},
activated:function(){
    console.log('7-activated');
},
deactivated:function(){
    console.log('8-deactivated');
},
beforeDestroy:function(){
    console.log('9-beforeDestroy 销毁之前');
},
destroyed:function(){
    console.log('10-destroyed 销毁之后')
}

第5节:Template 制作模版

1. 直接写在选项里的模板

// 写法比较直观,但是如果模板html代码太多,不建议这么写
var app=new Vue({
     el:'#app',
     data:{
         message:'hello Vue!'
      },
     template:`
        

我是选项模板

` })

2. 写在