Javascript 角度旋转指令在控制器加载后实例化
我有一个控制器。以下是构造函数函数的相关部分(此函数的正确术语是什么?): 所以activate函数基本上是一个通用函数,它接受一系列数据获取函数。它在开始时广播,在结束时广播 然后我在控制器范围内嵌套了一个指令,下面是指令的相关部分:Javascript 角度旋转指令在控制器加载后实例化,javascript,angularjs,Javascript,Angularjs,我有一个控制器。以下是构造函数函数的相关部分(此函数的正确术语是什么?): 所以activate函数基本上是一个通用函数,它接受一系列数据获取函数。它在开始时广播,在结束时广播 然后我在控制器范围内嵌套了一个指令,下面是指令的相关部分: function link(scope, element, attrs) { scope.$on('ctrlLoadingStarted', function (event, args) { scope.s
function link(scope, element, attrs) {
scope.$on('ctrlLoadingStarted', function (event, args) {
scope.spinnerOn = true;
});
scope.$on('ctrlLoadingFinished', function (event, args) {
scope.spinnerOn = false;
});
}
如您所见,它只是简单地侦听开始和结束事件,并打开和关闭微调器
问题是控制器似乎在指令之前实例化。这会导致广播关闭而未打开微调器
我试图简单地把scope.spinnerOn=true指令的第一行中的code>(这样,无论控制器何时相对于指令实例化进行实例化,微调器都将始终继续)。然而,我遇到的问题是,控制器的第二次广播将在指令实例化之前熄灭,并导致无休止的旋转
我只想确保,如果控制器在指令之前实例化,但数据获取需要一段时间,微调器将旋转
感谢您的建议。在$timeout中触发激活功能
function activate() {
$scope.$broadcast('ctrlLoadingStarted');
var promises = [getUsers()];
return $q.all(promises).then(function (eventArgs) {
$scope.$broadcast('ctrlLoadingFinished');
});
}
$timeout(activate)
这样,激活功能将在下一个摘要循环中调用
有关摘要循环与浏览器事件循环集成的更多信息,请访问:
免责声明:这是我对Javascript/浏览器工作原理的理解。这可能不正确
我想我需要指定一个时间,第二个参数是$timeout?$timeout在没有超时规范的情况下做什么?你能详细介绍一下“下一个摘要周期”吗?第一个摘要周期实例化所有对象?当角度负载时,是否总是有第二个摘要周期,或者它仅在出现超时的情况下发生?
function activate() {
$scope.$broadcast('ctrlLoadingStarted');
var promises = [getUsers()];
return $q.all(promises).then(function (eventArgs) {
$scope.$broadcast('ctrlLoadingFinished');
});
}
$timeout(activate)