如何在商店中使用Vue插件?

时间:2018-10-24 21:15:16

标签: javascript vue.js vuejs2 vuex vuex-modules

在vuex模块或纯js模块中使用插件是否有正确/已记录的方式? 我正在使用事件总线来实现它,不确定这是否是正确/最佳方法。请帮忙。

Plugin1.plugin.js:

const Plugin1 = {
  install(Vue, options) {
    Vue.mixin({
      methods: {
        plugin1method(key, placeholderValues = []) {
          return key;
        },
      },
    });
  },
};

export default Plugin1;

在App.vue中:

Vue.use(Plugin1, { messages: this.plugin1data });

在商店/ plain-js模块中

const vue = new Vue();
const plugin1method = vue.plugin1method;

1 个答案:

答案 0 :(得分:2)

您可以使用this._vm;访问 Vue实例
Vue全局,先使用import Vue from 'vue';,然后使用Vue;

我猜您定义了一个实例方法,因此它将是前一种(this._vm.plugin1method()


更新

我无法告诉您应该使用哪种方式,因为它看不到您的功能在插件中的定义。

但是,有一个示例应说明实例与全局实例之间的区别

const myPlugin = {
  install: function(Vue, options) {
    // 1. add global method or property
    Vue.myGlobalMethod = function() {
      // something logic ...
      console.log("run myGlobalMethod");
    };
    Vue.mixin({
      methods: {
        plugin1method(key, placeholderValues = []) {
          console.log("run mixin method");
          return key;
        }
      }
    });
    // 4. add an instance method
    Vue.prototype.$myMethod = function(methodOptions) {
      console.log("run MyMethod");
      // something logic ...
    };
  }
};

Vue.use(Vuex);
Vue.use(myPlugin);

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      this._vm.$myMethod();
      Vue.myGlobalMethod();
      this._vm.$options.methods.plugin1method();  // <-- plugin mixin custom method
      state.count++;
    }
  }
});

当您提交增量时,即:this.$store.commit('increment')两种方法都将执行