指南
基础概要
- 安装
- 介绍
- Vue 实例
- 模板语法
- computed 属性和 watcher
- class 和 style 绑定
- 根据条件进行渲染
- 列表渲染
- 事件处理
- 表单 input 绑定
- 组件基础
过渡 & 动画
- 进入、离开和列表的过渡
深入组件
- 组件注册
- props
- 自定义事件
- slot
- 动态组件和异步组件
- Handling Edge Cases
- 状态间的过渡
可重用 & 合成
- mixin
- 自定义指令
- render 函数 & jsx
- 插件
- 过滤器
工具
- 生产环境部署
- 单文件组件
- 单元测试
- TypeScript 支持
扩展升级
- 路由
- 状态管理
- 服务端渲染
内部原理
- 深入响应式原理
升级迁移
- 从 Vue 1.x 迁移
- 从 Vue Router 0.7.x 迁移
- 从 Vuex 0.6.x 迁移到 1.0
其他更多
- 对比其他框架
- 加入 Vue.js 社区
- 认识团队
mixin
基础
mixin 是分发 Vue 组件的可复用功能的一种非常灵活方式。每个 mixin 对象可以包含全部组件选项。当组件使用 mixin 对象时,mixin 对象中的全部选项,都会被“混入(mix)”到组件自身的选项当中。
例如:
// 定义一个 mixin 对象 |
选项合并(option merging)
当 mixin 对象和组件自身的选项对象,在二者选项名称相同时,Vue 会选取合适的“合并(merge)”策略。
例如,对 data 对象进行浅合并(单个属性深合并),在冲突情况下,优先使用组件的 data。
var mixin = { |
具有相同名称的钩子函数,将合并到一个数组中,最终它们会被依次调用。此外,需要注意,mixin 对象中的同名钩子函数,会在组件自身的钩子函数之前调用。
var mixin = { |
例如,methods
, components
和 directives
,这些值为对象的选项(option),则会被合并到相应的选项对象上。但是,在二者的键名(key)发生冲突时,就会优先使用组件选项对象中键值对:
var mixin = { |
注意,在 Vue.extend()
中,Vue 也使用了与此相同的合并策略。
全局 mixin(global mixin)
也可以在全局使用 mixin。请谨慎使用!一旦在全局中使用了 mixin,就会影响到之后创建的每个实例。在用法正确时,可以为自定义选项注入处理逻辑:
// 为自定义选项 `myOption` 注入一个处理函数 |
请少量且小心谨慎地使用全局 mixin,因为这会影响到之后创建的每个 Vue 实例,包括第三方组件也会受到影响。在多数情况下,如同以上示例中所演示的,你应该只将全局 mixin,用于自定义选项的处理逻辑。还有一个比较不错的做法,就是在插件中使用全局 mixin,然后通过调用插件来复用组件功能,以避免应用程序中的重复部分。
自定义选项的合并策略(custom option merge strategies)
在合并自定义选项(custom option)时,Vue 会使用默认策略,即覆盖已有值。如果想要定制自定义选项的合并逻辑,则需要向 Vue.config.optionMergeStrategies
添加一个函数:
Vue.config.optionMergeStrategies.myOption = function (toVal, fromVal) { |
对于大多数基于对象(object-based)的选项,可以使用 methods
的合并策略:
var strategies = Vue.config.optionMergeStrategies |
可以在 Vuex 1.x 的合并策略里,找到一个高级用法示例:
const merge = Vue.config.optionMergeStrategies.computed |