2017-03-03 44 views
2

我正在创建一个vue的web应用程序,我有几个动态内容的页面,也有几个主要是静态内容的页面。我想将所有这些静态字符串移动到一个地方。如何让所有的静态字符串在一个地方

一个选择可以使用vue-i18nvue-multilanguage,这些给支持有内容的文件,如this,但是我真的有支持多国语言没有用的情况下,所以它也似乎有点超必杀我。

另一种选择可以是为所有字符串创建一个vuex存储区,我已经在使用vuex进行状态管理。

什么是可以做到这一点的好方法。

+0

你不需要使用Vuex如果你已经不使用它在你的应用程序,它可以矫枉过正 - 你可以使用简单的对象和存储everythng那里http://stackoverflow.com/questions/42326821/ I-AM-使用-VUE-JS-和蟒蛇瓶-AS-MY-后端,我想做的到了,一些本地-VARI/42326978#42326978 –

回答

1

我不知道这样做的标准方式,这也适用于所有的web框架。这就是说这是一个有趣而有效的问题。

如果我不得不做一些事情:

  1. 我想这些字符串是随处可见。
  2. 我宁愿不必在所有组件中导入这些字符串,每次需要使用它们。
  3. 我想存储空间是描述性的,这样我就不必来回检查我想要导入的内容。 [在我看来最困难的部分]

为了实现1,我们可以使用:

  1. Vuex
  2. 一个services/some.js文件,其中出口的object
  3. Plugins

我会去与plugins因为:

我可以只在一个组件使用this得到的字符串,Vue.use(plugin)防止习惯两次相同的插件,并在同一时间实现所有点(第三将仍然是一个坚强的坚果来破解)。只有我知道它的缺点可能会混淆vue实例。

所以插件可以设计这样的:

// stringsHelperPlugin.js 
const STRING_CONST = { 
    [component_1_Name]: { 
    key1: val1, 
    key2: val2, 
    .... 
    }, 
    [component_2_Name]: { 
    key1: val1, 
    key2: val2, 
    .... 
    }, 
    ... 
} 

StringConst.install = function (Vue, options) { 
    Vue.prototype.$getStringFor = (componentName, key) => { 
    return STRING_CONST['componentName'][key] 
    } 
} 

export default StringConst 

main.js这可以使用,如:

import StringConst from 'path/to/plugin' 

Vue.use(StringConst) 

,你可以在组件模板使用像这样:

<div> 
{{ $getStringFor(<component_1_name>, 'key1') }} 
</div> 

你可以在方法中使用类似this.$getStringFor(<componentName>, key)的东西。几乎所有vuejs必须提供。

为什么我最难叫第三点是:修的如果你改变组件的名字,你可能也不得不改变它在通过插件返回的object。这个问题可以通过多种方式进行处理。

0

,您可根据npm module包含你的字符串

相关问题