关于vue 中的API (nextTick directive filters Vue.use)
nextTick
vue在更新数据的时候,其实是一个异步的过程,在我们去修改数据流中的数据,也就是定义在data中的数据的时候,页面组件组件并不会立即去响应,因此说vue在更新数据的时候是一个异步的过程; 每次在更改数据的时候,它都会打开一个队列,并缓冲在同一个事件循环中发生的所有数据更改,也就是说vue会等所有的修改完成之后才去执行页面二次渲染;
nextTick,就是在这个队列更新之后才会去执行的一个API方法;官方给出的定义是: 推迟下一个DOM更新周期后执行的回调。在您更改了一些数据以等待DOM更新后立即使用它。
例如 created(){
this.$nextTIck( () => {
console.log( this.name) //更新
})
console.log(this.name) //undefined
this.name = "更新"
}
directive
vue中存在了许许多多的指令,但是总有一些功能或者需求场景上,这些已经存在的指令是不能满足我们的应用的,因此,vue提供了 directive 方法,我们可以去自定义指令
例如定义全局的指令:
Vue.directive( 'log', {
inserted: (el) => {
console.log( el.innerHTML)
}
})
定义局部的指令
export default {
data(){ },
directive: {
log: {
inserted: (el) => { console.log(el.innerHTML) }
}
}
}
其中 el 指的是:我们将自定义指令 v-log 写在哪个标签上,那么 el 就代表的是哪个虚拟的dom元素; 而inserted是钩函数,钩函数一般在定义指令的时候会用到,因此对应的还存在一些指令钩参数;
钩函数包括: bind、inserted、update、componentUpdated、unbind;
钩参数包括: el、binding、vnode、oldNode;其中binding包括name、value、oldValue、expression、arg、modifers;
filters
js允许您定义可用于应用普通文本格式的筛选器。过滤器可以在两个地方使用:胡须插值和v-bind
表达(后者在2.1.0+中得到支持)。过滤器应该附加到JavaScript表达式的末尾,用“管道”符号表示:
{{ msg | capture}};
例如 filters: {
captureA: (value) => {
if( !value) { return '----'}
},
captureB: (value) => {
value == '----' //true
return "数据不存在"
}
}
定义了filter之后,用法上如上所写,但是其实每个变量是可以接收多个参数的,比如 {{ msg | carptureA | captureB}}; 其中captureA接收到的参数是msg的值,而captureB接收到的参数是
captureA返回的值;
Vue.use
该方法通常用在定义插件即定义组件的时候用到,我们通常在进行组件定义的时候,其实不用像官方文档支出的那样,那么麻烦;官方文档指出:一个vue.js插件应该公开一个install
方法。方法将使用
Vue
构造函数作为第一个参数,以及可能的选项。
其实在定义公共组件(插件)的时候,也并不一定要用到 Vue.use
例如: import Dialog from './dialog.vue'
Vue.component( 'VDialog', Dialog);
这样我们就可以通过 <v-dialog></v-dialog>来直接使用这个组件了