mixins和vuex区别
mixins和vuex区别Mixins:可以定义共用的变量,在每个组件中使用,引入组件中之后,各个变量是相互独立的,值的修改在组件中不会相互影响。如果相同对象,组件会覆盖mixinsMixins,中文意思是混入,所以它的功能是混合。对象和引人mixins的组件混合。vuex:用来做状态管理的,里面定义的变量在每个组件中均可以使用和修改,在任一组件中修改此变量的值之后,其他组件中此变量的值也会随之修
组件调用mixins的规律,主要分下面几种情况:
1.对于created,mounted 等生命周期函数 mixin文件中的代码先执行,组件中的后执行
2.对于data中定义的字段,组件中定义组件覆盖mixin中同名字段
3.对于 method中的同名方法,组件内的同名方法覆盖mixin中的方法
一、mixins和vuex区别
Mixins:可以定义共用的变量,在每个组件中使用,引入组件中之后,各个变量是相互独立的,值的修改在组件中不会相互影响。
如果相同对象,组件会覆盖mixins
Mixins,中文意思是混入,所以它的功能是混合。对象和引人mixins的组件混合。
vuex:用来做状态管理的,里面定义的变量在每个组件中均可以使用和修改,在任一组件中修改此变量的值之后,其他组件中此变量的值也会随之修改。
二、mixins和组件的区别:
组件:在父组件中引入组件,相当于在父组件中给出一片独立的空间供子组件使用,然后根据props来传值,但本质上两者是相对独立的。
Mixins:则是在引入组件之后与组件中的对象和方法进行合并,相当于扩展了父组件的对象与方法,可以理解为形成了一个新的组件。
(装饰器模式)
三、mixins的使用
- 首先创建一个js文件,例如elTableAdsorbent.js
export const elTableAdsorbent = {
data() {
return {
count:10
}
},
methods: {
// 显示页面中所有内容
handleCount() {
this.count++
}
}
或者
// 定义一个混入对象
var myMixin = {
data(){
return{
parent: 405
}
},
mounted: function () {
this.hello()
},
methods: {
hello: function () {
console.log(this.parent, 'hello from mixin!')
}
}
}
- 然后在需要此需求的vue页面引入并且使用
<el-button type="primary" @click="handleCount">{{count}}</el-button>
import { elTableAdsorbent } from '@/utils/mixin/elTableAdsorbent'
export default {
mixins: [elTableAdsorbent],
data() {
return {}
},
created(){},
methods:{},
watch:{}
}
- 同名钩子函数将合并为一个数组,因此都将被调用。另外,混入对象的钩子将在组件自身钩子之前调用。
var mixin = {
created: function () {
console.log('混入对象的钩子被调用')
}
}
new Vue({
mixins: [mixin],
created: function () {
console.log('组件钩子被调用')
}
})
// => "混入对象的钩子被调用"
// => "组件钩子被调用"
- 两个对象键名冲突时,取组件对象的键值对。
var mixin = {
methods: {
conflicting: function () {
console.log('from mixin')
}
}
}
var vm = new Vue({
mixins: [mixin],
methods: {
conflicting: function () {
console.log('from self')
}
}
})
vm.conflicting() // => "from self"
四、vuex的使用
states
getters
mutations
actions
modules
1.安装vuex, npm 或者cdn引入js
2.this.$store.commit(‘increment’)
五、mixins的应用
var install = function (Vue, options) {
// 1. 添加全局方法或属性
Vue.myGlobalMethod = function () {
// 逻辑...
}
// 2. 添加全局资源
Vue.directive('my-directive', {
bind (el, binding, vnode, oldVnode) {
// 逻辑...
}
...
})
// 3. 注入组件
Vue.mixin({
created: function () {
// 逻辑...
}
...
})
// 4. 添加实例方法
Vue.prototype.$myMethod = function (options) {
// 逻辑...
}
}
更多推荐
所有评论(0)