AngularJS - 在具有特定名称的所有指令都已呈现后触发一次函数

时间:2016-02-18 09:59:05

标签: angularjs

背景
嗨,让我们说我有一个有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中添加混合结果。

最后的笔记 该功能不必在任何上述控制器/链接功能内。

非常感谢您的帮助。

0 个答案:

没有答案