【发布时间】:2015-04-18 03:10:46
【问题描述】:
以下作品:
<script>
angular.module('myApp', [])
.filter('myFilter', ['$rootScope', function($rootScope) {
return function(v) {
return $rootScope.capitalize ? (v && v.toUpperCase()) : v;
};
}])
.controller('myController', ['$rootScope', '$scope', function($rootScope, $scope) {
$scope.flipCapitalize = function() {
$rootScope.capitalize = !$rootScope.capitalize;
}
}]);
</script>
{{"Hello" | myFilter }}
<div ng-controller="myController">
<button ng-click="flipCapitalize()">flip</button>
</div>
当您按下按钮时,屏幕上的“Hello”一词会在大小写和大写之间切换。
但是 Angular 并不“知道”它应该重新调用过滤器函数。这样做只是因为单击会重新启动摘要外观并重新执行所有操作。
我的问题:这种行为是否得到保证?我是否可以始终假设过滤器将在摘要循环中重新调用,并且我可以使用我能找到的任何范围内的任何数据?还是我运气好?
我的第二个问题:如果在每个摘要循环上都重新调用过滤器功能,有什么方法可以阻止这种行为吗?我可以告诉它,除非参数已经改变,否则不要再调用这个函数,你会得到相同的答案吗?还是我必须手写?
【问题讨论】:
-
是的,第一个选项每次都会运行,而不是它,我喜欢在 angular 指令上执行它,它将更新
keyup事件的输入。您可以使用ng-model-options执行第二个行为 -
顺便说一句,我想说,一般来说,过滤器不应该依赖于状态。不是说不能有例外,但确实感觉不对。
标签: angularjs