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

时间:2015-02-25 12:35:04

标签: javascript angularjs

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

activate();

        function activate() {
            $scope.$broadcast('ctrlLoadingStarted');
                var promises = [getUsers()];
                return $q.all(promises).then(function (eventArgs) {
                    $scope.$broadcast('ctrlLoadingFinished');
            });
        }

因此,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;放在指令的第一行(这样,无论何时控制器相对于指令实例化进行实例化,微调器总是会继续)。然而,我遇到的问题是控制器的第二次广播将在指令被实例化之前熄灭,从而导致无限的旋转器。

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

感谢所有建议,提前谢谢。

1 个答案:

答案 0 :(得分:2)

在$ timeout中触发激活功能。

function activate() {
            $scope.$broadcast('ctrlLoadingStarted');
                var promises = [getUsers()];
                return $q.all(promises).then(function (eventArgs) {
                    $scope.$broadcast('ctrlLoadingFinished');
            });
        }

$timeout(activate)

使用此功能,将在下一个摘要周期中调用activate函数。

有关摘要周期Integration with the browser event loop部分的详情,请参见:https://docs.angularjs.org/guide/scope

免责声明:这是我对Javascript /浏览器如何工作的理解。这可能不正确。

How Javascript process our request In your case Solution