Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基于组件值的vue-i18n sharedMessages不';我好像不工作_Javascript_Vue.js_Vue I18n - Fatal编程技术网

Javascript 基于组件值的vue-i18n sharedMessages不';我好像不工作

Javascript 基于组件值的vue-i18n sharedMessages不';我好像不工作,javascript,vue.js,vue-i18n,Javascript,Vue.js,Vue I18n,我们有一些VueJS组件,它们为所有资源呈现内容,我们可以根据route参数从服务器获取这些资源。所有资源都由它们自己的类表示(我们使用它) 基本上,我们所有的资源定义如下: 导出默认类扩展模型{ 资源(){ 返回“发票”; } 获取i18n(){ 返回{ 嗯:{ 资源:“发票|发票” }, 荷兰:{ 资源:“工厂|工厂” } }; } } 当我们有一个特定于资源的组件时,我们希望执行以下操作: 标题可以放在这里:所有{{$tc('resource',2}}的Lis 从“./models”

我们有一些VueJS组件,它们为所有资源呈现内容,我们可以根据route参数从服务器获取这些资源。所有资源都由它们自己的类表示(我们使用它)

基本上,我们所有的资源定义如下:


导出默认类扩展模型{
资源(){
返回“发票”;
}
获取i18n(){
返回{
嗯:{
资源:“发票|发票”
},
荷兰:{
资源:“工厂|工厂”
}
};
}
}
当我们有一个特定于资源的组件时,我们希望执行以下操作:


标题可以放在这里:所有{{$tc('resource',2}}的Lis
从“./models”导入模型;
导出默认值{
数据(){
返回{
资源:新模型[this.$route.params.resource]();
};
}, 
i18n:{
sharedMessages:this.resource.i18n
}
}   
这似乎不起作用。 我还尝试使用以下函数拉入sharedMessages:

i18n:{
sharedMessages:()=>{返回this.resource.i18n;}
}
这也没有解决问题。 看来我们不能这样使用它。 我仔细检查并打印`{resource.i18n.en.resource}}}正确地打印我期望的字符串

关于我所监管的内容,或者根本不受支持的内容,以及获得我们所期待的结果的解决方案,有什么想法吗

刚刚也为它创建了一个

再次感谢!
David

您在这里只遗漏了一件事。i18n在vue组件中的data()之前工作。因此,此.resource无法工作

要解决此问题,可以按如下方式使用:

export default {
  name: "App",
  data() {
    return {
      resource: new TestClass()
    };
  },
  i18n: {
    messages: {
      en: {
        local: "Local message in English"
      },
      nl: {
        local: "Lokaal bericht in het Nederlands"
      }
    },
    sharedMessages: new TestClass().i18n,
  }
};
如果要继续处理数据,可以使用mergeLocaleMessage

import i18n from '@/i18n.js'; //your plugin path.
i18n.mergeLocaleMessage(i18n.locale, this.resource.i18n[i18n.locale]);

这里您只遗漏了一件事。i18n在vue组件中的data()之前工作。因此,此.resource无法工作

要解决此问题,可以按如下方式使用:

export default {
  name: "App",
  data() {
    return {
      resource: new TestClass()
    };
  },
  i18n: {
    messages: {
      en: {
        local: "Local message in English"
      },
      nl: {
        local: "Lokaal bericht in het Nederlands"
      }
    },
    sharedMessages: new TestClass().i18n,
  }
};
如果要继续处理数据,可以使用mergeLocaleMessage

import i18n from '@/i18n.js'; //your plugin path.
i18n.mergeLocaleMessage(i18n.locale, this.resource.i18n[i18n.locale]);

嗨,David,我不知道我是否完全理解,但是如果你想更改语言,你只需要设置:this.$i18n.locale='en'right??因为你是从路由器获得语言,你可以在一些生命周期方法中设置它(例如:created).Hiya-感谢您的回复,但您没有了解问题。问题是我无法在组件中加载此.resource.i18n中的sharedMessages。这基本上就是我要实现的。有关sharedMessages选项的文档可在Hi David获得,我不知道我是否完全理解,但如果您想更改语言,请st需要设置:this.$i18n.locale='en'正确??因为您是从路由器获取lang,所以可以在某些生命周期方法中设置它(例如创建).Hiya-感谢您的回复,但您没有发现问题。问题是我无法将此.resource.i18n中的sharedMessages加载到组件中。这基本上就是我试图实现的。sharedMessages选项的文档在Heya上可用-我知道,但事实上这是我的主要问题。本例中的TestClass是一个通过属性传入。我尝试将问题缩小到我们真正需要的范围,从而使问题变得更简单:使用属性(通过道具或数据)在sharedMessages中…@DavidHeremans,因此在这种情况下,您可以使用mergeLocaleMessage。我将编辑我的答案。这也不起作用,因为该寄存器用于全局i18n。当页面上有两个组件(例如两个网格)时,第二次合并将覆盖第一次合并的消息。为了解决这个问题,我们从mergeLocaleMessage移动到sharedMessages。嘿,我知道,但这实际上是我的主要问题。本例中的TestClass是一个通过属性传入的类。我尝试通过缩小问题d来简化问题拥有我们真正需要的:在sharedMessages中使用一个属性(通过道具或来自数据…@DavidHeremans,因此在这种情况下,您可以使用mergeLocaleMessage。我将编辑我的答案。这也不起作用,因为该寄存器用于全局i18n。当页面上有两个组件(例如两个网格)时,第二次合并将覆盖第一次合并的消息。我们从mergeLocaleMessage移动到sharedMessages以尝试解决此问题。