介绍
mixins 选项接受一个混合对象的数组 ,这些混合对象可以像正常的实例对象一样包含选项
他们将再 vue.extends()里 最终选择使用相同的选项合并
//extends()允许声明扩展另一个组件 , 区别于mixins,组件自身的选项会比要扩展的源组件具有更高的优先级.
如果你混合包含一个钩子而创建组件本身也有一个,两个函数将被调用。
Mixin 钩子按照传入顺序依次调用,并在调用组件自身的钩子之前被调用。
1 2 3 4 5 6 7 8 9
| var mixin = { created: function () { console.log(1) } } var vm = new Vue({ created: function () { console.log(2) }, mixins: [mixin] }) // => 1 // => 2
|
多个组件同时用到了一些methods,computed等什么时,可以考虑使用。
例:
- 当list含有数据时,某个组件将改变,多个页面都将调用,这时将该方法单独拉出来。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| export const palyListMixin = { computed:{ ...mapGetter([ 'playList ]) }, mounted(){ this.handlePlayList(this.playList) }, //keep-alive组件的周期 activated(){ this.handlePlayList(this.playList) }, watch:{ playList(newVal){ this.handlePlayList(newVal) } }, methods:{ //若引用了该mixin但是没有这个方法,将报错。 handlePlayList(){ throw new Error('components must handlePlayList function ') } } } 组件引用: methods:{ handlePlayList(playList){ const top = playList.length > 0 ? '60px' : ''; this.$refs.recommendListWrapper.style.top = top; //改变组件 }, }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| export const searchMixin = { data(){ return{ query:'', } }, computed:{ ...mapGetters([ 'searchHistory' //load历史 ]) }, methods:{ saveSearch(){ this.saveSearchHistory(this.query) //保存搜索历史 }, onQueryChange(ii){ this.query = ii //搜索时进行检索 }, addQuery(query){ this.$refs.searchBox.setQuery(query); //搜索时进行检索 }, ...mapActions([ 'saveSearchHistory', 'deleteSearchHistory', //多个组件需要同时进行的操作 ]) } }
|