Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 角度:加载所有指令时控制器中的运行函数_Angularjs_Angularjs Directive - Fatal编程技术网

Angularjs 角度:加载所有指令时控制器中的运行函数

Angularjs 角度:加载所有指令时控制器中的运行函数,angularjs,angularjs-directive,Angularjs,Angularjs Directive,我正在尝试编写一些代码,允许我在控制器中运行一个函数,但只有在整个dom设置好并准备好之后(包括指令链接函数run等) 我目前正在通过$rootScope广播在ctrl/service和指令之间进行通信。指令未拾取控制器加载时的第一次广播。原因当然是控制器在指令链接函数运行之前加载。我已经阅读了一些类似的问题,人们建议在这些电话中使用$timeout。不幸的是,这并不总是有效的,我不想用大量的$timeout调用扰乱我的ctrl/服务。因此,我正在寻找另一种解决我的问题的方法 沟通方式如下: 1

我正在尝试编写一些代码,允许我在控制器中运行一个函数,但只有在整个dom设置好并准备好之后(包括指令链接函数run等)

我目前正在通过$rootScope广播在ctrl/service和指令之间进行通信。指令未拾取控制器加载时的第一次广播。原因当然是控制器在指令链接函数运行之前加载。我已经阅读了一些类似的问题,人们建议在这些电话中使用$timeout。不幸的是,这并不总是有效的,我不想用大量的$timeout调用扰乱我的ctrl/服务。因此,我正在寻找另一种解决我的问题的方法

沟通方式如下:

1.)控制器通知服务准备一些数据(通过服务中的函数调用)

2.)服务告知指令显示数据(通过广播)

3.)指令显示数据…在我的情况下是否显示:(

编辑:

由于计时在我的应用程序中至关重要,我基本上在寻找一种方法,在所有角度组件完成加载后立即在控制器中启动一个函数。控制器中的该函数将通过给范围变量赋值来显示内容。同时,它将开始花费时间。当然,我只能开始这样做一旦指令被加载,否则tmining错误或指令尚未准备好显示内容等

我读过Ben Nadel的一篇博文,这篇博文基本上展示了指令是如何加载的。我希望设置一个最后加载的外部指令,这样我就可以从那里触发已完成的加载。不幸的是,只要任何内部指令使用templateUrl,这就不起作用了。

使用$timeout会很糟糕。不要这样做。您无法定义服务器调用需要多长时间

我建议使用以下模式:

  • 让控制器使用服务加载一些数据,并让 控制器中的promise将返回数据分配给范围变量
  • 将该范围变量传递到指令中
  • 在directive link函数中设置手表,当它加载时,它将从未定义值变为所需值。完成
//在控制器中

YourService.all().then(function(data) {
  $scope.data = data;
});
//在你看来

<some-directive your-data="data"></some-directive>

我提出了一些类似的想法,但我必须重新表述一下我的问题。Timinig在我的应用程序中至关重要,这就是为什么我需要确保在运行控制器中的第一个功能之前,一切都准备好了。但我可以使用watch方法而不是广播,因为指令至少会接听来电以显示某些内容。唯一的问题是lem现在是控制器中的值的更改和指令中的更新不会同时发生(我的意思是至少在彼此之后)是的,因为一切都是异步的,所以您需要使用正确的技术。我需要更多地了解您的问题,以帮助您进一步解决问题。此时,服务、控制器和指令之间的通信可以通过事件调度、数据绑定和其他可能的内容进行存档。
angular.module('blah.directives').directive('someDirective', function() {
    return {
      scope: {
        yourData: '='
      },
      link: function(scope, element, attrs) {

        var watcher = scope.$watch('yourData', function() {
          if(scope.yourData === undefined) return;

          // at this point your data will be loaded, do work

          // optionally kill watcher at this point if it's not going to update again
          watcher();
        });
      }
    }
  });