因为在项目中 mixins(混合)
特性使用频率是很高的 有必要熟练掌握
官方文档: mixins
实际项目中 一般都存在 列表(list) 这种很常见的使用场景
话再多都不如上demo
file: mixins/list.js
|
|
解析
一个列表的基本属性
属性 | 作用或备注 |
---|---|
list | 列表 |
page | 页码 |
limit | 每页条数 |
total | 总条数 |
基本方法
方法 | 作用或备注 |
---|---|
initList() | 初始化列表 |
loadData() | 加载数据 |
loadMore() | 加载更多 |
扩展方法[主要用于参数的处理和结果的处理]
方法 | 作用或备注 |
---|---|
getParams() | 获取HTTP请求参数 |
pushToList() | 数据处理方法 |
每一个列表结构都具备的属性以及方法 可以放到mixins
的声明中
从这段代码中可以得知 加载了该mixins
的组件会在创建之后执行一个initList
方法
顾名思义 就是初始化列表的方法
|
|
问题
但是问题来了 如果我的组件 不只是在初始化的时候使用
而是在使用了keep-alive
的应用下在route->data()
的钩子中执行初始化呢?
|
|
这时候你打开控制台 刷新页面 就会发现 第一次进入 初始化了两次
原因
因为mixins
的合并策略
当混合对象与组件包含同名选项时,这些选项将以适当的策略合并。例如,同名钩子函数被并入一个数组,因而都会被调用。另外,混合的钩子将在组件自己的钩子之前调用。
|
|
值为对象的选项,如 methods, components 和 directives 将合并到同一个对象内。如果键冲突则组件的选项优先。
|
|
注意 Vue.extend() 使用同样的合并策略。
所以即使你在引用的组件中 把created
重写 也是被合并(两个都会执行) 因为合并的策略不同 导致了 methods
可以被重写 而created
ready
等只会被合并
解决方法
怎么解决?
读过阅读官方文档后我想你会有答案
我这里提供一个文档中提到的比较灵活的简单的方案 加一个自定义选项
|
|
通过该选项 doNotInit
来判断是否需要在组件创建完毕之后就初始化
在调用该mixins
的组件中 添加这么一个选项 就可以让组件不执行初始化方法
而是通过route->data()
钩子来控制列表的初始化
调用
file: anyVueComponent.vue
|
|
说到底 仔细阅读Vue文档 项目中遇到的绝大多数问题 都能迎刃而解~