gpt4 book ai didi

javascript - 如何延迟特定 Controller (不是路由)的实例化?

转载 作者:行者123 更新时间:2023-11-30 17:52:04 25 4
gpt4 key购买 nike

我想要一个指令,它的行为与典型的 ng-controller 一样,但我希望它在 promise 被解决后被调用,而不是更早。在 HTML 中,可以这样写:

<div ng-controller="myCtrl" ctrl-promise="p">

p 可以是对父作用域的任何 promise 。我知道有一种方法可以延迟路由 Controller 的实例化(如此处回答:Angular.js delaying controller initialization),但我更愿意为每个 Controller 而不是每个路由指定它。我知道我可以将 ng-if 与 p 作为属性一起使用,但还有其他方法吗?

最佳答案

所以你希望 div 中的东西存在,只是没有 Controller 控制它,直到 promise 被解决?

这是一个指令,它将在 promise 被解决时创建一个 Controller :

angular.module('myApp')
.directive('delayController', function($controller, $q) {
return {
scope: true,
link: function(scope, elm, attr) {
$q.when(scope.$parent.$eval(attr.delayControllerPromise)).then(function() {
var ctrl = $controller(attr.delayController, {
$scope: scope
});
elm.children().data('$ngControllerController', ctrl);
});
}
};
});

你可以这样使用它:

<div delay-controller="MyCtrl" delay-controller-promise="myPromiseExpr()">
</div>

关于javascript - 如何延迟特定 Controller (不是路由)的实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18802757/

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