vue+ts中使用mixin

561 阅读1分钟

首先创建mixin文件

ximin.vue

<script lang="ts">
  import {Component, Vue} from 'vue-property-decorator';
  import {Getter} from 'vuex-class';
  // 以下为必加申明,如果不加再调用页面是无法使用的
  declare module 'vue/types/vue' {
    interface Vue {
      mixinGetList(params: any): Promise<any>;
    }
  }

  @Component({
    name: 'CommonMiXin'
  })
  export default class CommonMiXin extends Vue {
    @Getter('navList') public navList!: any;  // 导航列表用于获取一级菜单的id
    public parentId = '';  // 父级Id
    /***
     * 获取文章列表
     * @private
     */
    public mixinGetList(data: any) {
      const list = this.$api.xHttp.get(this.$interfaces.post.getList, data);
      console.log(list);
      return list;
    }


    public created() {
      this.$nextTick(() => {
        const parent = this.navList.filter((item: any) => item.name === 'XXX')[0];
        this.parentId = parent.id;
        console.log(this.parentId);
      });
    }
  }
</script>

调用页面 xx.vue

<script lang="ts">
  import {Component, Vue} from 'vue-property-decorator';
  import CommonMiXin from '../mixins/mixin.vue';

  @Component({
    name: 'TopNew',
    components: {},
    mixins: [CommonMiXin]
  })
  export default class TopNew extends Vue {
    private topNew = {};   // 专题页面的顶部新闻

    // private getTopNew() {
    //   const params = {};
    // }

    public created() {
      console.log(this.mixinGetList(111));  // 这里调用mixin页面的方法
    }
  }
</script>

目前调用事件没问题,但是有如果想mixin页面的parentId会出现报错,具体什么原因还不是很清楚,有大佬知道的可以留言