gpt4 book ai didi

javascript - 在 AngularJS 中更新模块值或重新注册过滤器

转载 作者:行者123 更新时间:2023-12-03 12:23:42 25 4
gpt4 key购买 nike

是否可以有一个依赖于延迟加载值的过滤器?

在我的例子中,语言包是异步加载的,并且一旦加载值,过滤器就应该反射(reflect)加载的值。

// setup the i18n filter
app.filter('i18n', ['localizedTexts', function(localizedTexts) {
return function(localeKey) {
console.log(localeKey, localizedTexts) // prints out nulls for the second argument

return localizedTexts && localizedTexts[localeKey];
};
}]);

// setup the defualt value
app.value('localizedTexts', null);

// load values
app.run(['$http', function($http) {
$http.get('values.json').success(function(response) {

// update the value -- DOES NOT INVALIDATE THE FILTER NOR THE VIEW
app.value('localizedTexts', response);
});
}]);

我还准备了一个 Plunker 示例:http://plnkr.co/edit/THTD3UiYgegusCl54Qhp?p=preview

想法?

最佳答案

您可以使用工厂而不是使用值。 Associated Plunker

app.factory('localizedTexts', ['$http', function($http) {
var localizedTexts = {};

$http.get('values.json').success(function(res) {
angular.extend(localizedTexts, res);
})

return localizedTexts;
}]);

更新:如果这看起来有点脏,那么您可以在配置阶段使用 $provide 提供程序,并使用 decorator 来更改 的值localizedTexts 值。检查此更新PLUNKER

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

关于javascript - 在 AngularJS 中更新模块值或重新注册过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24324380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com