Javascript AngularJS工厂/过滤器未正确更新

Javascript AngularJS工厂/过滤器未正确更新,javascript,angularjs,Javascript,Angularjs,我有一家工厂在跟踪我的翻译。基本上,我将语言设置为字符串,然后希望在语言更改时使用过滤器更新视图 到目前为止,如果我在我的视图中预先定义了语言,一切都按预期进行,但是当我单击按钮更新语言时,什么也没有发生 谁能指出我做错了什么 我的看法是: <div ng-app="testApp"> <div ng-controller="myController"> <p >{{ data.title | translate }}</p>

我有一家工厂在跟踪我的翻译。基本上,我将语言设置为字符串,然后希望在语言更改时使用过滤器更新视图

到目前为止,如果我在我的视图中预先定义了语言,一切都按预期进行,但是当我单击按钮更新语言时,什么也没有发生

谁能指出我做错了什么

我的看法是:

<div ng-app="testApp">
  <div ng-controller="myController">
    <p >{{ data.title | translate }}</p>
    <p >{{ data.text }}</p>
    <button type="button" ng-click="changeLanguage('en')">English</button>
    <button type="button" ng-click="changeLanguage('sl')">Slovene</button>
  </div>
</div>
我在中创建了这个示例,以便在项目中实现它之前进行尝试


非常感谢您的帮助。

使用有状态过滤器不是一个好做法,但在您的情况下,它是一个有效的用例-需要重新评估(在摘要循环中)。因此,您的过滤器需要“标记”为有状态

testApp.filter('translate', function(Translations, Language) {

  function translateFilter(input) {
    return Translations[Language.getCurrentLanguage()][input] || '';
  };

  // marked as stateful
  translateFilter.$stateful = true;

  return translateFilter;

});
有关详细信息,请在文档中搜索“有状态”筛选器:


顺便说一句,对于平移,可以使用角度平移。查看他们的过滤器实现

使用有状态过滤器不是一个好做法,但在您的情况下,它是一个有效的用例-需要重新评估(在摘要循环中)。因此,您的过滤器需要“标记”为有状态

testApp.filter('translate', function(Translations, Language) {

  function translateFilter(input) {
    return Translations[Language.getCurrentLanguage()][input] || '';
  };

  // marked as stateful
  translateFilter.$stateful = true;

  return translateFilter;

});
有关详细信息,请在文档中搜索“有状态”筛选器:


顺便说一句,对于平移,可以使用角度平移。查看他们的筛选器实现

我认为,因为您的数据没有更改,所以表达式没有被重新计算。在changeLanguage方法的末尾,显式的$scope.$digest()是否有帮助?我认为,因为您的数据没有更改,所以表达式不会被重新计算。在changeLanguage方法的末尾,显式的$scope.$digest()是否有帮助?