我試圖簡化這個問題,儘可能讓忽略這個例子是如何毫無意義的是:)
我有一個顯示計時器的指令。每500ms它會增加計數器。
JS
.directive('testTimer', function($interval) {
return {
link: function(scope, el, attrs) {
var count;
scope.counter = 0;
count = $interval(tick, 500);
function tick() {
scope.counter++;
}
}
}
})
HTML
<test-timer>{{counter}}</test-timer>
每次蜱()運行,在我的控制器功能也跑
.controller('testController', function($scope) {
$scope.array = [
1,2,3
]
$scope.getNumber = function(num) {
console.log('Why does this run every time tick runs?')
return num;
}
})
HTML
<div ng-controller="testController">
<div ng-repeat="number in array">
{{getNumber(number)}}
</div>
<test-timer>{{counter}}</test-timer>
我試過在我的$間隔中使用invokeApply = false,但是然後計數器不在DOM中更新。我該如何防止我的指令反覆地在控制器中運行其他函數,但仍然讓視圖中的計數器更新?
下面是該問題的一個JS小提琴(看控制檯日誌) https://jsfiddle.net/marmite/nf4c18tx/
在我的實際使用情況下,定時器是每一個頁面上。有很多頁面,他們都做各種不同的事情。從ng-repeat函數中返回一個數字只是一個簡單的方法來演示問題。我希望我能做些事情來告訴指令不關心除本身以外的任何事情,因此它不會觸發其他所有的摘要。 – marmite