【发布时间】:2019-09-01 20:54:41
【问题描述】:
我正在尝试使用 Vue、Vuex 和 VueI18n 实现语言环境更新。我想我找到了更新区域设置的方法,在 store 对象中设置 i18n 值,然后像这样使用它(突变):
UPDATE_LANGUAGE: (state, newLanguage) => {
state.language = newLanguage;
this.$i18n.locale = state.language;
}
但令人惊讶的是不起作用......它说 this.$i18n 没有定义,但它是。
import store from "./store";
import EnMessages from "@/messages/en.json";
import EsMessages from "@/messages/es.json";
const i18n = new VueI18n(Vue, {
es: EsMessages,
en: EnMessages
});
i18n.locale = store.state.language;
store.$i18n = i18n;
Vue.http.interceptors.push((request, next) => {
//internacionalizacion en todas las urls
request.url = `${request.url}?lang=${store.getters["getLanguage"]}`;
//token en todas las urls
request.headers.set("token", store.getters["getToken"]);
next();
});
new Vue({
i18n,
router,
store,
render: h => h(App)
}).$mount("#app");
【问题讨论】:
-
尝试将方法定义更改为:
UPDATE_LANGUAGE: function(state, newLanguage) { -
它起作用了,但是,我不明白为什么...... es6 中的箭头函数应该保留整个对象的 this 而不是传统的 function()[]。不是这样吗??你可以把它作为答案,我会检查它。
-
请看下面我的回答——我试着更详细地解释一下。
-
"es6中的箭头函数应该保持整个对象的this" ????这是不正确的。箭头函数的
this是定义它的上下文。见developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…