gpt4 book ai didi

javascript - Controller 加载后, Angular 旋转指令被实例化

转载 作者:行者123 更新时间:2023-12-02 16:25:36 26 4
gpt4 key购买 nike

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

activate();

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

因此,activate 函数基本上是一个通用函数,它接受一组数据获取函数。它在开始时广播并在结束时广播。

然后我在 Controller 作用域中嵌套了一个指令,这是该指令的相关部分:

function link(scope, element, attrs) {
scope.$on('ctrlLoadingStarted', function (event, args) {
scope.spinnerOn = true;
});
scope.$on('ctrlLoadingFinished', function (event, args) {
scope.spinnerOn = false;
});
}

如您所见,它只是监听开始和结束事件并打开和关闭微调器。

问题是 Controller 似乎在指令之前实例化。这会导致广播关闭并且不会打开旋转器。

我尝试简单地将 scope.spinnerOn = true; 放在指令的第一行(这样,无论 Controller 何时相对于指令实例化,旋转器将始终继续)。然而,我遇到的问题是 Controller 的第二次广播会在指令实例化之前消失,并导致无尽的旋转。

我只是想确保,如果 Controller 在指令之前实例化,但数据获取需要一段时间,旋转器就会旋转。

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

最佳答案

在$timeout内触发activate函数。

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

$timeout(activate)

这样,激活函数将在下一个摘要周期中被调用。

有关摘要循环与浏览器事件循环集成部分的更多信息,请访问:https://docs.angularjs.org/guide/scope

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

How Javascript process our request In your case Solution

关于javascript - Controller 加载后, Angular 旋转指令被实例化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28719179/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com