Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/434.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 使用自定义过滤器的Angularjs翻译_Javascript_Angularjs - Fatal编程技术网

Javascript 使用自定义过滤器的Angularjs翻译

Javascript 使用自定义过滤器的Angularjs翻译,javascript,angularjs,Javascript,Angularjs,这是一个从angularjs 1.2升级到1.6的老项目,它使用常量、服务和过滤器进行翻译。 字符串在所有页面范围内的翻译都正常,但升级后不起作用。下面是一个关于代码如何使用的示例: app.js .constant("config", { "translations": { 'es': { 'Default string': 'String por defecto', } } }); service.js return function

这是一个从angularjs 1.2升级到1.6的老项目,它使用常量、服务和过滤器进行翻译。 字符串在所有页面范围内的翻译都正常,但升级后不起作用。下面是一个关于代码如何使用的示例:

app.js

.constant("config", {
    "translations": {
      'es': {
        'Default string': 'String por defecto',
      }
    }
});
service.js

return function(text) {
  var lang = $rootScope.lang;
  var langExists = typeof config.translations[lang] !== 'undefined';
  if (lang && langExists && config.translations[lang][text]) {
    return config.translations[lang][text];
  }
  return text;
};
filter.js

return function(text) {
  return translateService(text);
};
index.html

        <div class="dropdown pull-right">
          <button class="btn btn-primary dropdown-toggle" type="button" data-toggle="dropdown">
        {{ 'Default string' | translate }}   <span class="caret"></span></button>
          <ul class="dropdown-menu" style="cursor:pointer;">
            <li><a ng-href="#" ng-click="header.changeLanguage('es')">es</a></li>
            <li><a ng-href="#" ng-click="header.changeLanguage('en')">en</a></li>
          </ul>
        </div>
实际上,在这一点上,数据是使用$resource检索的

重点和问题是,当用户单击ChangeLanguage时,所有使用{{‘String’| translate}}的字符串都必须在所有范围内进行翻译。在升级之前,这是有效的

让我大吃一惊的是,我不明白过去为什么会工作,因为过滤器不会再次调用,作用域也不会连接到服务。。。
如何使用自定义筛选器“刷新”应用程序中所有控制器和作用域中的字符串?

这里是您的问题所在。把它贴在问题上。我试图解决,但我不知道为什么它不起作用。如果我做错了什么,请更新小提琴并告诉我。祝你好运,非常感谢!此处更新:但配置更改时过滤器翻译刷新仍不工作…确定,已解决。从Angular 1.3开始,内容只使用“刷新”一次过滤器,它不是“状态感知”的,因为文字字符串永远不会改变…有必要添加过滤器。$stateful=true;在filter declaration.Woow中,很难找到解决方案。如果可以,请更新JSFIDLE,以便我可以发布答案或自己发布…:)是的,一场噩梦!谢谢!这是你的问题的答案。把它贴在问题上。我试图解决,但我不知道为什么它不起作用。如果我做错了什么,请更新小提琴并告诉我。祝你好运,非常感谢!此处更新:但配置更改时过滤器翻译刷新仍不工作…确定,已解决。从Angular 1.3开始,内容只使用“刷新”一次过滤器,它不是“状态感知”的,因为文字字符串永远不会改变…有必要添加过滤器。$stateful=true;在filter declaration.Woow中,很难找到解决方案。如果可以,请更新JSFIDLE,以便我可以发布答案或自己发布…:)是的,一场噩梦!谢谢!
var vm = this;

  vm.language = 'Select language';

  vm.changeLanguage = function(lang) {
    $rootScope.lang = lang;
  };