是的,你可以使用這個工廠。這將僅實例化$ timeout和$ interval一次。
通過建立工廠類似下面,你可以共享數據中檢索/從控制器的$區間內創建(參見下圖):
angular.module('app')
.factory('interval', interval);
interval.$inject = ['$interval'];
function interval($interval) {
var counter = {};
activate();
return {
counter: counter
};
function activate() {
$interval(increaseCounter, 1000);
}
function increaseCounter() {
if(angular.isUndefined(counter.count)) {
counter.count = 0;
} else {
counter.count++;
}
}
}
而這裏的控制器:
angular.module('app')
.controller('TestController', testController);
testController.$inject = ['interval'];
function testController(interval) {
var vm = this;
this.counter = interval.counter;
}
現在你可以在視圖中顯示的計數器(或者您從$間隔得到任何數據):
<div ng-controller="TestController as ctrl">
{{ctrl.counter.count}}
</div>
重要通知是,你不能直接分享count
。這是因爲JavaScript處理通過引用/值傳遞值的方式。
這裏的工作小提琴:https://jsfiddle.net/m5hw5w1o/
不會對你的$超時和$間隔做更多的信息:是的,可以。 – JanS
@JanS 你好,我目前正在從Api Server中提取最新的數據。 每個API請求有5分鐘的時間間隔。 但是,當我從一個狀態到另一個計時器再次被調用。 注意:該計時器代碼寫入第一個父控制器。 –
你有這個代碼片段嗎? –