javascript - 使原型在 vuex 中可访问
问题描述
在我的app.js
文件中,我构建了这个,所以我可以在 vue 中使用翻译:
Vue.prototype.trans = string => _.get(window.i18n, string);
这在我的 vue 文件中效果很好:
{{ trans('translation.name') }}
问题是我正在使用vuex
,我需要在模块中翻译一些东西:
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
export default {
namespaced: true,
state: {
page: 1,
criterias: [
{
name: this.trans('translation.name'),
filter: "life",
active: false
}
}
}
但这里this.trans('translation.name')
不工作。我怎样才能让它工作?
解决方案
我认为变异 Vuex 原型是一种不好的做法,在这种情况下,它真的没有必要。
只需创建一个名为localization.js
并在该文件中实例化 i18n 插件的文件。加上导出一个命名函数以返回相同的 i18n 实例。
// localization.js
const i18n = new VueI18n({ ... });
export const getLocalization = () => i18n;
export default i18n;
然后在您的 Vuex 模块中导入该getLocalization
函数并执行它以获取相同的i18n
实例并使用它进行翻译。
// vuex-module.js
import Vue from 'vue';
import Vuex from 'vuex';
import { getLocalization } from './localization';
Vue.use(Vuex);
const i18n = getLocalization();
export default {
state: {
criteria: i18n('translation.name'),
},
}
推荐阅读
- javascript - 从 servlet 中的 ajax 发布请求获取数据(图像 toDataUrl)
- pdf - 如何在 pdftk 中正确创建多语言元数据
- c# - 无需等待即可调用控制台应用程序
- jquery - 如何在 jQuery 中获取动态创建的输入的单选值
- javascript - 通过 JavaScript 对象数组中的变量访问字段
- node.js - 如何创建一个不断监听端口且不存在的nodejs应用程序
- c# - 名称空间“Microsoft.Office.Inte rop”中不存在类型或名称空间名称“Outlook”
- angular - Angular / RxJS:如何生成延迟值序列?
- debugging - 组装 - 鼠标点击第二次尝试不起作用
- java - ORA-00923: 在 SeleniumWebDriver 中未找到 FROM 关键字