详解Vue.js组件可复用性的混合(mixin)方式和自定义指令
混合是什么
混合(mixins)是一种分发Vue组件中可复用功能的非常灵活的方式。混合对象可以包含任意组件选项。以组件使用混合对象时,所有混合对象的选项将被混入该组件本身的选项。
例如:
vartpl1={ template:'#stpl1', data:function(){ return{msg:false} }, methods:{ msgf:function(){ this.msg=!this.msg } } } vartpl2={ template:'#stpl2', data:function(){ return{msg:false} }, methods:{ show:function(){ this.msg=true }, hide:function(){ this.msg=false } } } newVue({ el:'#box', components:{ tpla:tpl1, tplb:tpl2, } })
我们会发现,两个组件中的数据大多数相同,这是我们可以将它们进行混合
//首先,定义一个混合对象 varmymixin={ data:function(){ return{msg:false} }, methods:{ show:function(){ this.msg=true }, hide:function(){ this.msg=false }, msgf:function(){ this.msg=!this.msg } } } vartpl1={ template:'#stpl1', minins:[mymixin] } vartpl2={ template:'#stpl2', minins:[mymixin] } //如果我们需要在第一个组件定义data为true时,我们可以直接在组件内定义,他会覆盖mixin的data vartpl1={ template:'#stpl1', minins:[mymixin], data:function(){ msg:true } }
自定义指令
除了默认设置的核心指令(v-model和v-show),Vue也允许注册自定义指令。注意,在Vue2.0里面,代码复用的主要形式和抽象是组件——然而,有的情况下,你仍然需要对纯DOM元素进行底层操作,这时候就会用到自定义指令。
//注册一个全局自定义指令v-focus Vue.directive('focus',{ //当绑定元素插入到DOM中。 inserted:function(el){ //聚焦元素 el.focus() } })
也可以注册局部指令,组件中接受一个directives的选项:
directives:{ focus:{ //指令的定义--- } }
然后你可以在模板中任何元素上使用新的v-focus属性:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。