Elf*_*yer 8 angularjs angular-filters
我正在使用本地化过滤器刷新问题.加载文件后,视图不会刷新.我试过$scope.$apply()
和$filter("localization")(localizationService.text)
,也不是工作.
本地化服务:
angular
.module("myApp")
.factory("localizationService", function () {
var service = {
text: null,
language: "en"
};
return service;
});
Run Code Online (Sandbox Code Playgroud)
定位过滤器:
angular
.module("myApp")
.filter("localization", function(localizationService) {
return function (value) {
if (localizationService.text && localizationService.text.hasOwnProperty(value)) {
return localizationService.text[value];
}
return value;
}
});
Run Code Online (Sandbox Code Playgroud)
控制器自动刷新要使用的文件:
$scope.$watch(function () {
return $location.path();
}, function () {
var fileName = "../Localizations/" + $location.path().substring(1) + "/localization-" + localizationService.language + ".json";
$http.get(fileName).then(function (response) {
localizationService.text = response.data;
//$filter("localization")(localizationService.text);
//$scope.$apply();
});
});
Run Code Online (Sandbox Code Playgroud)
本地化en.json:
{
"test": "this is working !"
}
Run Code Online (Sandbox Code Playgroud)
HTML:
<div>{{'test' | localization}}</div>
Run Code Online (Sandbox Code Playgroud)
此代码写test
而不是this is working !
.
我怎样才能解决这个问题 ?
tas*_*ATT 25
从版本1.3.0-rc.2开始,过滤器默认为无状态.这意味着,如果左侧表达式发生更改,则仅重新评估已过滤的表达式.
你有这个:
<div>{{'test' | localization}}</div>
Run Code Online (Sandbox Code Playgroud)
test
在这种情况下显然永远不会改变,所以整个表达式只会被评估一次.
您需要将过滤器标记为有状态:
app.filter("localization", function(localizationService) {
function localization(value) {
if (localizationService.text && localizationService.text.hasOwnProperty(value)) {
return localizationService.text[value];
}
return value;
}
localization.$stateful = true;
return localization;
});
Run Code Online (Sandbox Code Playgroud)
演示: http ://plnkr.co/edit/YIzmH3lR9350McprusAA?p=preview
归档时间: |
|
查看次数: |
4256 次 |
最近记录: |