当前位置: 首页 > Web前端 > vue.js

Vue的Mixins

时间:2023-04-01 00:36:21 vue.js

是一种非常灵活的方式,可以在Vue组件中分发可重用的功能。publicpart//mixin.jsexportconsttoggle={data(){isshowing:false},methods:{toggleShow(){this.isshowing=!this.isshowing}}}//modal.vue//在这个组件中引入mixin,可以直接使用toggleShow()import{mixin}from'../mixin.js'exportdefault{mixins:[mixin],mounted(){}}Merge当组件和mixin对象包含同名选项时,这些options以适当的方式混合1.当数据对象中mixin的数据对象与组件的数据发生冲突时,组件的数据优先varmixin={data:function(){return{message:'hello',foo:'abc'}}}newVue({mixins:[mixin],data:function(){return{message:'goodbye',bar:'def'}},创建:function(){console.log(this.$data)//=>{message:"goodbye",foo:"abc",bar:"def"}}})其次,将同名的钩子函数混入一个数组,将被调用,但对象的钩子将被混合be在组件自身的钩子之前调用varmixin={created:function(){console.log('调用了混合对象的钩子')}}newVue({mixins:[mixin],created:function(){console.log('调用了组件钩子')}})//=>"调用了混合对象的钩子"//=>"调用了组件钩子"3.optionvalue是一个对象Options,例如方法、组件和指令,将混合到同一个对象中。当两个对象键名冲突时,取组件对象的键值对varmixin={methods:{foo:function(){console.log('foo')},conflicting:function(){console.log('frommixin')}}}varvm=newVue({mixins:[mixin],methods:{bar:function(){console.log('bar')},冲突:function(){console.log('fromself')}}})vm.foo()//=>"foo"vm.bar()//=>"bar"vm.conflicting()//=>"fromself"globalmixins全局mixins注册到每个单独的组件。因此,它们的使用场景极其有限,要非常小心Vue.mixin({mounted(){console.log("我是mixin");}})newVue({...})再次,谨慎使用!console.log会出现在每个组件上