需要时重新应用滤镜
Re-apply filter when needed
我自己写了一个简单的翻译过滤器:
angular.module('app')
.filter('translate', translate);
translate.$inject = ['translation', 'language'];
function translate(translation, language) {
return function(value) {
var result = translation[language.getLanguage()][value];
if (!result) {
throw new Error("no translation");
}
return result;
}
}
语言可以更改:登录后,用户可以使用与默认语言不同的语言。
但是,过滤器不会重新应用:仍然显示旧的翻译。当语言改变时,是否有方法再次执行过滤器?
在这个例子中,依赖项'language'是一个包含该语言的服务。getLanguage()返回该语言。
您采用了一种有趣但有缺陷的方法。只有当被过滤的值改变时,Angular过滤器才会重新应用,所以它们不适合实际改变输入本身。不过,你可以使用有状态过滤器来实现这一点,这是Angular 1.3中新增的一个特性。
你只需要在你的过滤器中设置$stateful属性为true,并确保注入了依赖项。这样,angular就会在必要时刷新过滤器。
下面是一个基于你的代码的例子。
filter('translate', ['translation', 'language', function (translation, language) {
function translationFilter(value) {
var result = translation[language.getLanguage()][value];
if (!result) {
throw new Error("no translation");
}
return result;
}
translationFilter.$stateful = true;
return translationFilter;
}]);
请注意,有状态过滤器可能会降低性能,因此如果这给您带来麻烦,您可以采用不同的方法。
更好的解决方案是使用angular-translate,它不仅以一种更可维护的方式为你处理所有这些,而且还提供了一个(有状态的)过滤器,做你想做的事情。
看一下这个API,例如:
相关文章:
- 可以在这里为背景图像设置滤镜吗
- 使用 GSAP 对模糊滤镜进行动画处理
- 在没有滤镜的情况下模糊背景
- Kineticjs 将 Mask 滤镜应用于图层
- 将特殊效果应用于所选滤镜
- 角度滤镜不打印空格
- HTML5 画布对比度滤镜
- 如何在IE中将灰度和反转效果与SVG滤镜相结合
- 角度滤镜和 NgAnimate 冲突
- 根据滤镜的值有条件地添加 ng-animate 指令
- D3:将滤镜作为背景添加到SVG元素
- 如何为图像添加滤镜(模糊)
- 推特打字,寻血猎犬滤镜开始
- Kinetijs:应用滤镜后阴影模糊不起作用
- HTML5画布不能应用sw滤镜
- 在Appcelerator中对照片应用滤镜
- 对树的孩子也应用滤镜
- 需要时重新应用滤镜
- 如何在KonvaJS中对带有图像填充的形状应用滤镜
- 捕捉/保存/导出应用了CSS滤镜效果的图像