Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度旋转指令在控制器加载后实例化_Javascript_Angularjs - Fatal编程技术网

Javascript 角度旋转指令在控制器加载后实例化

Javascript 角度旋转指令在控制器加载后实例化,javascript,angularjs,Javascript,Angularjs,我有一个控制器。以下是构造函数函数的相关部分(此函数的正确术语是什么?): 所以activate函数基本上是一个通用函数,它接受一系列数据获取函数。它在开始时广播,在结束时广播 然后我在控制器范围内嵌套了一个指令,下面是指令的相关部分: function link(scope, element, attrs) { scope.$on('ctrlLoadingStarted', function (event, args) { scope.s

我有一个控制器。以下是构造函数函数的相关部分(此函数的正确术语是什么?):

所以activate函数基本上是一个通用函数,它接受一系列数据获取函数。它在开始时广播,在结束时广播

然后我在控制器范围内嵌套了一个指令,下面是指令的相关部分:

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(这样,无论控制器何时相对于指令实例化进行实例化,微调器都将始终继续)。然而,我遇到的问题是,控制器的第二次广播将在指令实例化之前熄灭,并导致无休止的旋转

我只想确保,如果控制器在指令之前实例化,但数据获取需要一段时间,微调器将旋转


感谢您的建议。

在$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)