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()是否有帮助?