Javascript 在AngularJS中更新模块值或重新注册过滤器
是否可能有一个依赖于延迟加载值的筛选器 在我的例子中,异步加载语言包,一旦加载了值,过滤器应该反映加载的值Javascript 在AngularJS中更新模块值或重新注册过滤器,javascript,angularjs,lazy-loading,angularjs-filter,Javascript,Angularjs,Lazy Loading,Angularjs Filter,是否可能有一个依赖于延迟加载值的筛选器 在我的例子中,异步加载语言包,一旦加载了值,过滤器应该反映加载的值 //设置i18n过滤器 app.filter('i18n',['localizedTexts',函数(localizedTexts){ 返回函数(localeKey){ log(localeKey,localizedTexts)//为第二个参数打印空值 返回localizedTexts&&localizedTexts[localeKey]; }; }]); //设置解除值 app.valu
//设置i18n过滤器
app.filter('i18n',['localizedTexts',函数(localizedTexts){
返回函数(localeKey){
log(localeKey,localizedTexts)//为第二个参数打印空值
返回localizedTexts&&localizedTexts[localeKey];
};
}]);
//设置解除值
app.value('localizedTexts',null);
//荷载值
运行(['$http',函数($http){
$http.get('values.json').success(函数(响应){
//更新值--不会使筛选器或视图无效
应用程序值('localizedTexts',响应);
});
}]);
我还准备了一个Plunker示例:
想法?您可以使用工厂而不是使用值。 更新:如果这看起来有点脏,那么您可以在配置阶段使用
$provide
提供程序,并使用装饰程序来更改本地化文本的值。检查此更新
谢谢这似乎奏效了,尽管它确实感觉有点脏。:)如果感觉有点脏,您可以在配置阶段使用$provide
提供程序的decorator()
方法并更改值本身。如果我们使用{}
初始化值,完全转储局部变量并改用$delegate
?普朗克:
app.factory('localizedTexts', ['$http', function($http) {
var localizedTexts = {};
$http.get('values.json').success(function(res) {
angular.extend(localizedTexts, res);
})
return localizedTexts;
}]);
app.value('localizedTexts', null);
app.config(['$provide', function($provide) {
$provide.decorator('localizedTexts', ['$delegate', '$http', function($delegate, $http) {
var localizedTexts = {};
$http.get('values.json').success(function(values) {
angular.extend(localizedTexts, values);
})
return localizedTexts;
}]);
}]);