Есть ли правильный / документированный способ использования плагина внутри модуля 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 });
В модуле store / plain-js:
const vue = new Vue();
const plugin1method = vue.plugin1method;
Если вы говорите о плагинах Vuex, посмотрите здесь: vuex.vuejs.org/guide/plugins.html. Но я думаю, вы хотите использовать плагины Vue внутри Vuex.
Это плагин, который в настоящее время используется в компонентах. Я хочу использовать тот же плагин в vuex
Голосующий против, укажите, пожалуйста, что не так в этом вопросе? Я работаю над сложным проектом vue.js и обладаю достаточными знаниями, чтобы задавать правильные вопросы.
Я думаю, что @Daniel лучше всего выразился в своем ответе ниже ... «Я не могу сказать вам, как вы должны его использовать, потому что я не вижу, как ваша функция определена в вашем плагине». Пожалуйста, добавьте более подробную информацию к вашему вопросу
вы можете получить доступ к своему Экземпляр Vue, используя this._vm;
и Vue global с использованием 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.info("run myGlobalMethod");
};
Vue.mixin({
methods: {
plugin1method(key, placeholderValues = []) {
console.info("run mixin method");
return key;
}
}
});
// 4. add an instance method
Vue.prototype.$myMethod = function(methodOptions) {
console.info("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')
, оба метода будут выполняться
На самом деле мой плагин - это глобальный плагин (vuejs.org/v2/guide/plugins.html). Он загружается с помощью Vue.use. Основываясь на этой информации, какой путь должен быть правильным?
Я обновил ответ. Надеюсь, это проясняет ситуацию. codeandbox.io/s/wooz0lm9l8
Добавлен код плагина, чтобы прояснить мой вопрос. Одно ограничение: я не могу изменить код плагина. Там он использует миксин.
в этом случае это экземпляр, я обновил ответ, чтобы включить его тоже
@Daniel Как тогда вы могли бы получить доступ или прочитать this._vm.$myMethod()
в юнит-тестах jest? Похоже, вы «не можете прочитать свойство $ myMethod of undefined».
@KevinT. у вас должен быть доступ к нему через wrapper.vm
src: vue-test-utils.vuejs.org/guides/#getting-started
Плагины обычно используются в экземплярах / компонентах
Vue
. Это может помочь, если вы объясните, какой плагин вы пытаетесь использовать, поскольку некоторые добавляют статические методы к классуVue
.