## **1. mixins作用**
* 是一种分发 Vue 组件中可复用功能的非常灵活的方式。混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项。
* **有点类似于继承的关系,定义组件的方法,数据供其他人使用,且数据和方法不共享**
## **2. 实例**
### **2.1 基础小案例**
**1. mixins-test.js 定义公用数据和方法**
~~~
// 定义了一个字面量类型的 组件模板对象
export const m1 = {
data() {
return {
sonmsg: { name: '小头儿子', age: 6 }
}
},
mounted(){
alert('mixins提供的mounted生命函数')
},
methods: {
myclick() {
this.$emit('func', this.sonmsg)
}
}
}
~~~
**2. mixins公用方法和数据** HelloWorld.vue
~~~
<template>
<div class="hello">
{{sonmsg}}
</div>
</template>
<script>
import {m1} from '@/util/mixins-test'
export default {
name: "HelloWorld",
props: {
msg: String
},
mixins: [m1]
};
</script>
~~~
弹出alert并显示共有数据
![](https://img.kancloud.cn/6d/76/6d762bcba26b60d4eb2d5535c2dc3ef8_736x212.png)
![](https://img.kancloud.cn/f5/26/f5268713163516ddf489853d2b8faac1_554x329.png)
### **2.2 数据和方法隔离**
**新建一个testmixns.vue组件**
* **引用了mixins共有数据的组件间,数据互相隔离不受影响**
* 同一组件引入***methods,components*等,选项会被合并,冲突后,覆盖mixins引入的方法**
* **生命周期函数会依次执行,不会覆盖**
重复的mounted方法,执行了两次,但是about组件的mounted方法执行的是自己的info方法,
#### 生命周期函数,不会覆盖,依次执行(先执行mixins的)
mixins
~~~
// 定义了一个字面量类型的 组件模板对象
export const m1 = {
data() {
return {
sonmsg: {name: '小头儿子', age: 6}
}
},
mounted() {
alert('mixins提供的mounted生命函数')
// this.info()
},
methods: {
info() {
alert("mixins的info方法");
}
}
}
~~~
testximns
~~~
<template>
<div class="hello">
{{sonmsg.age+10}}
</div>
</template>
<script>
import {m1} from '@/util/mixins-test'
export default {
name: "testmixins",
props: {
msg: String
},
mixins: [m1],
mounted() {
alert("test自己的mounted方法");
// this.info()
},
methods:{
info() {
alert("test自己的info方法");
}
}
};
</script>
~~~
mounted方法执行了两次
![](https://img.kancloud.cn/8e/b0/8eb08270f738227e7b4af074ff5a9554_586x176.png)
![](https://img.kancloud.cn/68/e2/68e232a0184af7949d71ed03c3b666dc_710x201.png)
![](https://img.kancloud.cn/cd/6f/cd6f7c7eae10a25914c74a13586b97d0_649x201.png)
数据是隔离的
![](https://img.kancloud.cn/41/89/41899c586ad87ae9598328b046210eb5_665x402.png)
#### methods的方法会覆盖mixins的方法
~~~
mounted() {
// alert("test自己的mounted方法");
this.info()
},
~~~
~~~
mounted() {
// alert('mixins提供的mounted生命函数')
this.info()
},
~~~
两次mounted都执行自己的info方法
![](https://img.kancloud.cn/01/cf/01cfb1f8b5f346cabe1f51e1503f7369_594x221.png)
![](https://img.kancloud.cn/a0/16/a016918f48d3981a8fb66ac2ec25e7fa_793x243.png)
- vue
- 为什么要学vue
- 数据双向绑定
- vue指令
- v-bind创建HTML节点属性
- v-on绑定事件
- v-cloak
- v-text
- v-for和key属性
- v-if和v-show
- 案例1
- 自定义指令
- vue样式
- vue生命周期
- vue过滤器
- 自定义键盘修饰符
- 跨域请求
- vue组件
- 组件基础
- 引入vue文件组件
- 引入render函数作为组件
- 兄弟间组件通信
- 组件函数数据传递练习
- 路由
- 数据监听
- webpack
- vue校验
- vue笔记
- form表单中input前部分默认输入,切不可修改
- mixins
- 部署到nginx
- scope
- render
- 下载文件
- vue动态组件
- axios
- Promise
- vue进阶
- node-vue-webpack搭建
- vue事件
- 插槽
- vuex
- vuex基础
- vuex命名空间
- HTML递归?
- this.$nextTick异步更新dom
- elementui
- table
- 修改element ui样式
- form
- 优质博客
- vuex state数据与form元素绑定
- es6
- Promise