我正在使用一个服务来获取需要由服务更新的变量。但是我无法在anonymus函数/委托函数中找到var。
(function() {
'use strict';
angular
.module('yoTest')
.service('mainService', mainService);
/** @ngInject */
function mainService($timeout) {
this.counter = 1;
this.updateCounter = function updateCounter() {
this.counter++;
$timeout(updateCounter, 500);
}
this.updateCounter();
}
})();
如果我通过$timeout
重新加载“updateCounter”,我会收到错误,为什么?
如何通过超时和委托/回调来访问它?
答案 0 :(得分:2)
问题是在调用函数时你刚刚在updateCounter
回调中传递了$timeout
函数引用。因为当$timeout
尝试评估该功能时,this
属于updateCounter
将属于this
,而不是考虑this
mainService
。在这种情况下,您必须使用.bind(this)
this.updateCounter = function updateCounter() {
this.counter++;
console.log(this.counter)
$timeout(updateCounter.bind(this), 500);
}
使用Fat Arrow
函数
$timeout(() => { updateCounter () }, 500);
答案 1 :(得分:2)
作为Pankaj的答案的替代方法,您可以将当前上下文绑定到变量,并使用此变量引用属性和函数。
function mainService($timeout) {
var service = this;
this.counter = 1;
this.updateCounter = function updateCounter() {
service.counter++;
console.log(service.counter)
$timeout(service.updateCounter, 500);
}
this.updateCounter();
}