vue mixin和extends的使用

全局使用场景:所有子组件内部都与要某一个state、computed或者某个方法时,甚至在所有子组件某个生命周期内都需要执行一个一样功能时,都可用全局mixin;

相同生命周期函数会先运行mixin内部的钩子函数,然后再运行组件内部的钩子函数,对于state、computed或者某个方法时,组件内部的会覆盖mixin内部的定义的
全局注入步骤:
  首先新建一个mixin.js文件:

import { mapGetters } from 'vuex'

// export const Mixin = {
export default{
  data(){
    return {
        navChildStatusOne: 1
    }
  },
  computed: {
    ...mapGetters([
      'navChildStatus'
    ]),
    pageMainLeft() {
      return this.navChildStatus ? '' : 'page-main-left'
    }
  },
  methods: {
      getUserlist(){
          console.log('from Mixin')
      }
  }
}

然后再mian.js页面引入

import mixins from '@/common/js/mixin'

然后注册

Vue.mixin(mixins)

使用: 
在所有组件内部都可调取内部的方法和状态:

mounted() {
    this.navChildStatusOne
    this.getUserlist()
},

引用顺序同全局一样

局部注入步骤:
  首先定义一个混入对象,然后混入对象混入到当前的组件中:
  

import mixins from '@/common/js/mixin'
    export default{
              mixins: [mixins],
        }

 

 

extends: 相当于复制了一个组件,在组件内部可以定义新的状态和方法,组件内部同名的方法或者state会覆盖extends组件里面的

<script>
    import dtl from './question-dtl.vue'
    export default{
        name: 'extendsss',
        extends: dtl,
        mounted(){
            this.breadcrumbs = [
                { name: '试题详情-试题详情' }
            ]
            this.GetQuestionBasicsInfo()
            this.GetQuestionInfo()
        },
        methods: {
            GetQuestionBasicsInfo(){
                
            },
            GetQuestionInfo(){
                
            }
        }
    }
</script>

 

posted @ 2020-11-30 16:17  一个懒惰的陈xx  阅读(296)  评论(0编辑  收藏  举报