javascript - 使原型(prototype)在 vuex 中可访问

标签 javascript vue.js prototype 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 原型(prototype)是一种不好的做法,在这种情况下,它真的没有必要。

只需创建一个名为 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 - 使原型(prototype)在 vuex 中可访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54293483/

相关文章:

javascript - `this`指的是什么?

javascript - Puppeteer 在指定时间安排 Action

javascript - 如何在 CSS 宽度变化时实现平滑的 CSS 动画?

html - 如何使用 bootstrap 在我的表单右上角之外放置一个 div?

javascript - AngularJS中范围原型(prototype)/原型(prototype)继承的细微差别是什么?

Javascript - parent.call(arguments) 和 child.prototype = new parent(arguments) 之间的区别?

javascript - React - 将数据传递给祖父组件

vue.js - vue-cli-service : SyntaxError: Unexpected token '...' . 需要一个属性名称

javascript - Vue2 事件总线在第二次调用后工作

java - Spring singleton bean 在被代理时在每个方法调用上创建新的实例/bean