全局混入mixins 阅读代码时未看到数据从哪里来?全局混入(新建组件文件(复用)导入全局注册))

mixins原理: 挂载到原型上面去了
注意:优先级、函数 、数据变量、
1.混入也可以进行全局注册。使用时格外小心!一旦使用全局混入,它将影响每一个之后创建的 Vue 实例。使用恰当时,这可以用来为自定义选项注入处理逻辑。
2.请谨慎使用全局混入,因为它会影响每个单独创建的 Vue 实例 (包括第三方组件)。大多数情况下,只应当应用于自定义选项,推荐将其作为插件发布,以避免重复应用混入。
**理解:Mixins:则是在引入组件之后与组件中的对象和方法进行合并,相当于扩展了父组件的对象与方法,可以理解为形成了一个新的组件。
混入 (mixins):是一种分发 Vue 组件中可复用功能的非常灵活的方式。混入对象可以包含任意组件选项。当组件使用混入对象时,所有混入对象的选项将被混入该组件本身的选项。
**
参考vue.js

疑问?

可以列举下应用场景吗 比如我有个项目 所有列表页都有导出功能合不合适用mixins?
在mixins里面写一个导出的公共方法,接收一个导出地址的参数,在你每个列表页调用mixins里面的导出方法就可以了(公共的方法或者数据其他的都可以用)逻辑组件复用

然后通过mixins:['文件名']来使用就可以了

局部混入使用

1.新建src/mixins/tabBar.js
示例:购物车底部显示

import {
    
     mapGetters } from 'vuex'
// 组件逻辑复用
// 导出一个 mixin 对象
/* 注意:除了要在 cart.vue 页面中设置购物车的数字徽标,还需要在其它 3 个 tabBar 页面中,为购物车设置数字徽标。
此时可以使用 Vue 提供的 mixins 特性,提高代码的可维护性。 */
export default {
    
    
  computed: {
    
    
    ...mapGetters('cart', ['total']),
  },
 // 方法二:
 onShow(){
    
    
   console.log(this.total,4444);
   uni.setTabBarBadge({
    
    
     index: 2,
     text: this.total+''
   })
 },
 //方法一:
 // onShow() {
    
    
 //   this.setBatge()
 // },
 // methods:{
    
    
 //   setBatge(){
    
    
 //     uni.setTabBarBadge({
    
    
 //       index: 2,
 //       text: this.total+''
 //     })
 //   }
 // },
}

2.页面直接使用

// 导入自己封装的 mixin 模块
  import tarBar from '../../mixins/tabBar.js'
  export default {
    
    
     // 将 badgeMix 混入到当前的页面中进行使用
   mixins:[tarBar],//组件混入  组件逻辑复用    
   // 优先级    封装的比自己优先级低(行内大于样式里面的)

全局混入

1.新建src/mixins/tabBar.js

import {
    
     mapGetters } from 'vuex'
// 组件逻辑复用
// 导出一个 mixin 对象
/* 注意:除了要在 cart.vue 页面中设置购物车的数字徽标,还需要在其它 3 个 tabBar 页面中,为购物车设置数字徽标。
此时可以使用 Vue 提供的 mixins 特性,提高代码的可维护性。 */
export default {
    
    
  computed: {
    
    
    ...mapGetters('cart', ['total']),
  },
 // 方法二:
 onShow(){
    
    
   console.log(this.total,4444);
   uni.setTabBarBadge({
    
    
     index: 2,
     text: this.total+''
   })
 },
 //方法一:
 // onShow() {
    
    
 //   this.setBatge()
 // },
 // methods:{
    
    
 //   setBatge(){
    
    
 //     uni.setTabBarBadge({
    
    
 //       index: 2,
 //       text: this.total+''
 //     })
 //   }
 // },
}

2.main.js

import mixin from "@/mixins";
Vue.mixin(mixin);

猜你喜欢

转载自blog.csdn.net/qq_43944285/article/details/125467499