背景
嗨,让我们说我有一个有2个视图的应用程序,其中一个有相同的指令在其中重复几次(每个指令虽然有不同的内容)。所以结构看起来像这样:
<view-1>
<my-directive>
<my-directive>
<my-directive>
</view-1>
<view-2>
<my-directive>
<my-directive>
<my-directive>
<my-directive>
</view-2>
注意,以上不是实际代码。
问题
如何在加载/渲染 myDirective 之后启动一次功能(最好是在最后一次渲染后)?
我的代码
angular.module('app').directive('myDirective', myDirective);
function myDirective() {
var directive = {
restrict: 'E',
bindToController: true,
controllerAs: 'ctrl',
controller: myDirectiveCtrl,
link: link
};
return directive;
function link() {
function onceFunction() {
// Launch this once
}
onceFunction();
}
function myDirectiveCtrl() {
}
}
angular.module('app').controller('myViewController', myViewController);
function myViewController() {
var ctrl = this;
}
上面的代码显然在视图-1中启动3次,在视图2中启动4次,这不是我的目标。
我尝试过的解决方案
1)创建一个服务,将最初设置的布尔变量设置为myViewController中的 true 。然后,在我的链接函数(或myDirectiveCtr)中创建一个函数,检查如果该变量是 true ,如果是,则将其设置为 false 和启动功能。
这是有效的,但我创建了一个服务,唯一的功能是传递这个真/假信息。
2)与上面相同,但使用$ rootScope,可能是$ broadcast()。
3)在myViewController()中使用$ timeout函数,这是一个糟糕的解决方案。 ($ timeout 0不起作用)。
4)一些奇怪的东西,比如在主app.js中添加混合结果。
最后的笔记 该功能不必在任何上述控制器/链接功能内。
非常感谢您的帮助。