vue中mixins的使用方法和注意地方

一、什么是Mixins?

mixins(混入),官方的描述是一种分发 Vue 组件中可复用功能的非常灵活的方式,mixins是一个js对象,它可以包含我们组件中script项中的任意功能选项,如data、components、methods 、created、computed等等。我们只要将共用的功能以对象的方式传入 mixins选项中,当组件使用 mixins对象时所有mixins对象的选项都将被混入该组件本身的选项中来,这样就可以提高代码的重用性,使你的代码保持干净和易于维护。

二、什么时候使用Mixins?

当我们存在多个组件中的数据或者功能很相近时,我们就可以利用mixins将公共部分提取出来,通过 mixins封装的函数,组件调用他们是不会改变函数作用域外部的。

三、如何创建Mixins?

在src目录下创建一个mixins文件夹,文件夹下新建一个myMixins.js文件。前面我们说了mixins是一个js对象,所以应该以对象的形式来定义myMixins,在对象中我们可以和vue组件一样来定义我们的data、components、methods 、created、computed等属性,并通过export导出该对象
myMixins.js:

// myMixins.js
export default {
   data () {
     return {
          num:1
      }
   },
   mounted() {
   	  this.speak();
   },
   methods: {
      speak() {
          console.log(this.num);
      },
   }
}

四、如何在组件中使用Mixins?

在需要调用的组件中引入myMixins.js文件,然后在export default 中引入你需要的对象即可

五、Mixins的特点

1)方法和参数在各组件中不共享,虽然组件调用了mixins并将其属性合并到自身组件中来了,但是其属性只会被当前组件所识别并不会被共享,也就是其他组件无法从当前组件中获取到mixins中的数据和方法。

① todo.vue:组件1中对num进行+1操作

// todo.vue
// 引入 myMixins.js 文件
import {myMixins} from './myMixins';

export default {
  mixins: [myMixins],
  data() {
    return {}
  },
  created() {
    this.num++
  },

}

② list.vue 组件2不进行操作

// list.vue
import {myMixins} from './myMixins';

export default {
  mixins: [myMixins],
  data() {
    return {}
  },
}

③ 分别切换到两个页面,查看控制台输出

会发现组件1改变了num里面的值,组件2中num值还是混合对象的初始值,并没有随着组件1的增加而改变

(2)引入mixins后组件会对其进行合并,将mixins中的数据和方法拓展到当前组件中来,在合并的过程中会出现冲突,接下来我们详细了解Mixins合并冲突

六、关于Mixins合并冲突

1)值为对象(components、methods 、computed、data)的选项,混入组件时选项会被合并,键冲突时优先组件,组件中的键会覆盖混入对象的

① 我们在混入对象增加num属性、getDate1方法和getDate2方法

// myMixins.js
export const myMixins = {
  components:{},
  data() {
    return {
      num: 1,
    }
  },
  methods: {
    getDate1() {
      console.log("num1 from mixins =", this.num )
    },
    getDate2() {
      console.log("num2 from mixins =", this.num )
    },
  }
}

② 我们在引入了myMixins文件的 todo.vue 组件中,增加num属性、getDate1方法和getDate3方法

// todo.vue
import { myMixins } from "./myMixins.js";
export default {
  mixins: [myMixins],
  data() {
    return {
      num: 18,
    }
  },
  mounted() {
    this.getDate1();
    this.getDate2();
    this.getDate3();
  },
  methods: {
    getDate1() {
      console.log('num1 from template =', this.num)
    },
    getDate3() {
      console.log('num3 from template =', this.num)
    },
  }
}

③ 我们会发现,组件中的age覆盖了混合对象的age,todo.vue 组件的getDate1方法覆盖了混合对象的getDate1方法

(2)值为函数(created、mounted)的选项,混入组件时选项会被合并调用,混合对象里的钩子函数在组件里的钩子函数之前调用

myMixins.js 中的console:

// myMixins.js
export const myMixins = {
  components:{},
  data() {
    return {}
  },
  created() {
    console.log('hello from mixin')
  }

todo.vue 中的 console

// todo.vue
import { myMixins } from "./myMixins.js";

export default {
  mixins: [myMixins],
  data() {
    return {}
  },
  created() {
    console.log('hello from self')
  }
}

控制台打印
在这里插入图片描述

七、vue中mixins的使用方法和注意点 (异步请求的情况)

当混合里面包含异步请求函数,而我们又需要在组件中使用异步请求函数的返回值时,我们会取不到此返回值,如下:

Mymixins.js文件中

// myMixins.js
export const myMixins = {
  components:{},
  data() {
    return {
      num: 1,
    }
  },
  methods: {
    getDate1() {
	  new Promise((resolve,reject) => {
	      let a = 1;
	      setTimeout(() => {
	        resolve(a)
	      },500)
	    }).then(res => {
	      console.log(res,'res');
	      return res
	  })
    },
  }
}

todo.vue 文件中

// todo.vue
import { myMixins } from "./myMixins.js";

export default {
  mixins: [myMixins],
  data() {
    return {}
  },
  mounted() {
    console.log(this.getDate1,'template1-func_one')
  }
}

在这里插入图片描述
解决方案:不要返回结果而是直接返回异步函数

Mymixins.js文件中

// myMixins.js
export const myMixins = {
  components:{},
  data() {
    return {
      num: 1,
    }
  },
  methods: {
   async getDate1() {
	  let result = await new Promise((resolve,reject) => {
	      let a = 1;
	      setTimeout(() => {
	        resolve(1)
	      },500)
	   })
	   return result
    },
  }
}

todo.vue 文件中

// todo.vue
import { myMixins } from "./myMixins.js";

export default {
  mixins: [myMixins],
  data() {
    return {}
  },
  mounted() {
    this.getDate1().then(res => {
      console.log(res,'template1-res')
    })
  }
}

在这里插入图片描述

  • 12
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用Vue mixins方法如下: 1. 在src目录下创建一个mixins文件夹,并在该文件夹下新建一个myMixins.js文件。 2. 在myMixins.js文件,定义一个对象,并在该对象定义你想要在组件复用的功能选项,如data、components、methods、created、computed等。 3. 使用export导出该对象。 4. 在需要使用mixins的组件,通过import引入myMixins.js文件,并在组件的mixins选项添加该对象。 5. 在组件可以直接使用mixins对象定义的功能选项,这样可以提高代码的重用性,并使代码保持干净和易于维护。 示例代码如下: ```javascript // 在myMixins.js文件定义mixins对象 export const myMixins = { data() { return { // 定义共用的data属性 } }, methods: { // 定义共用的方法 }, created() { // 定义共用的created钩子函数 }, // 其他共用的功能选项 } // 在需要使用mixins的组件引入并使用mixins对象 import { myMixins } from "@/mixins/myMixins.js"; export default { mixins: [myMixins], // 组件的其他选项 } ``` 通过以上步骤,你可以轻松地在Vue组件使用mixins,从而实现代码的重用和提高开发效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Vue — 详解mixins混入使用](https://blog.csdn.net/qq_42198495/article/details/118424355)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值