Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/405.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_Lazy Loading_Angularjs Filter - Fatal编程技术网

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;
  }]);
}]);