#vue.js #module #prototype #vuex
#vue.js #модуль #прототип #vuex
Вопрос:
Я настроил прототип vue
Vue.prototype.$preventAccess = function (role ) {
if(role === this.$store.state.role) {
// do some stuff
}
}
это моя основная точка входа, однако, когда я пытаюсь использовать его во внешнем модуле (prevent.js )
import store from '@store/store';
import Vue from 'vue';
export default function log({ next, to }) {
console.log(Vue.prototype.$preventAccess('Editor'));
}
Я получаю сообщение об ошибке
Cannot read property 'state' of undefined
Могу ли я не использовать свой прототип во внешнем файле JS, подобном этому? Как мне внедрить хранилище во внешний модуль?
Комментарии:
1. Без прототипа должно работать: Vue.$preventAccess = функция
2. нет, это просто прерывает работу в другом месте приложения.
3. Возможно, вам придется создать плагин, чтобы делать то, что вы хотите: vuejs.org/v2/guide/plugins.html
Ответ №1:
Следуя документации здесь :https://v2.vuejs.org/v2/guide/plugins.html
MyPlugin.install = function (Vue, options) {
// 4. add an instance method
Vue.prototype.$preventAccess = function (role) {
// some logic ...
}
}
Vue.use(MyPlugin);
Ответ №2:
При использовании prototype
у вас есть доступ к this
, когда вы создаете объект на его основе class
.
При доступе Vue.prototype.$preventAccess
нет this
, потому что нет экземпляра Vue
, поэтому не this
создается.
Ваш вызов сработает, если вы создадите экземпляр Vue
и вызовете $preventAccess
для этого экземпляра.
var app = new Vue({
el: "#app",
})
app.$preventAccess()
Теперь $preventAccess
определено this
.