这更像是一种解决这个问题的组织方法,而不是直接的解决方案。我的问题本身是,如果我有两个相互不依赖并且可以独立工作以达到其目的的指令。但是,如果存在其中一个指令,则另一个需要在另一个准备好后执行。在这种情况下,在不需要硬编码任何函数调用或事件的情况下,确保它以这种方式工作的合乎逻辑的方法是什么?
例如,假设您有一个构建某种网格的指令:
angular.module('App').directive('appGrid',function() {
return function($scope, element) {
$scope.rows = ...
};
});
然后我有另一个指令使元素水平滚动:
angular.module('App').directive('appPane',function() {
return function($scope, element) {
element.attachHorizontalScroll();
};
});
因此,我的 HTML 示例如下所示:
<div data-app-grid data-app-pane>
<div data-ng-repeat="row in rows">
<div data-ng-repeat="cell in row.cells">
{{ cell.data }}
</div>
</div>
</div>
基本上,appPane
指令需要在appGrid
指令被执行并且表准备好之后运行。
我能想到的一种解决方案是使用该方法观察数据以查看它何时准备就绪$scope.$watch
,但这会带来问题,因为更改可能会发生多次,这将是冗余更新页面的糟糕设计,它也会带来问题如果多个指令正在写入被监视的同一个范围变量。
另一种解决方案是让第一个指令发出一个事件(类似于 elementReady),然后让第二个指令接管。但是如果第一个指令不存在怎么办?那么第二个指令如何知道何时完成它的工作呢?可能还有另一个指令,它基本上是一个空指令,它只是为所有其他元素触发事件,但这有点小技巧。另外,如果多个其他指令触发elementReady
事件会发生什么?
另一种解决方案是创建第三个指令,该指令通过共享服务共享两个指令之间的逻辑。但这使得第三条指令完全依赖于其他指令以及它们之间的共享服务。这也需要更多不必要的测试代码以及编写指令的实际代码(与仅需要一 + 一行代码的第二种解决方案相比,需要更多代码)。
有任何想法吗?