Javascript 从嵌套函数访问函数属性
从嵌套函数访问函数属性时遇到问题。我肯定我错过了一些东西,但在谷歌搜索了3个小时后,我真的不知道该找什么。 背景:我想给angularjs添加一个控制器,在一段时间后重新加载页面。我的问题是从this.reloadTicker访问this.enabled。 重命名控制器函数然后访问它们的想法是行不通的。 一种解决方案是将所有内容存储在$scope中,但有更好的解决方案吗 我的代码:Javascript 从嵌套函数访问函数属性,javascript,angularjs,Javascript,Angularjs,从嵌套函数访问函数属性时遇到问题。我肯定我错过了一些东西,但在谷歌搜索了3个小时后,我真的不知道该找什么。 背景:我想给angularjs添加一个控制器,在一段时间后重新加载页面。我的问题是从this.reloadTicker访问this.enabled。 重命名控制器函数然后访问它们的想法是行不通的。 一种解决方案是将所有内容存储在$scope中,但有更好的解决方案吗 我的代码: ctrls.controller("reloaderCtrl", function reloader($scope
ctrls.controller("reloaderCtrl", function reloader($scope) {
this.enabled = true;
this.paused = false;
this.maxSecs = 30;
this.secs = 30;
this.reloadTicker = function() {
if (reloader.enabled && !reloader.paused) {
if (reloader.secs > 0) {
reloader.secs--;
} else {
reloader.reload();
reloader.secs = reloader.maxSecs;
}
$scope.$apply();
}
setTimeout(this, 1000);
}
this.reload = function() {
$scope.$emit('doReload');
}
setTimeout(this.reloadTicker, 1000);
});
您需要在某个变量中捕获这一点:
ctrls.controller("reloaderCtrl", function ($scope) {
var vm = this;
vm.enabled = true;
vm.paused = false;
vm.maxSecs = 30;
vm.secs = 30;
vm.reloadTicker = function() {
if (vm.enabled && !vm.paused) {
if (vm.secs > 0) {
vm.secs--;
} else {
vm.reload();
vm.secs = vm.maxSecs;
}
$scope.$apply();
}
setTimeout(this, 1000);
}
vm.reload = function() {
$scope.$emit('doReload');
}
setTimeout(vm.reloadTicker, 1000);
});
另外,我建议使用Angular$timeout而不是setTimeout$timeout
PSS。我建议大家阅读约翰·帕帕的《棱角风格指南》。这绝对是好读的您可以缓存This对象:var reloader=This;然后在嵌套函数reloader.enabled中。或者使用Function.prototype.bind函数。