在一个指令中更新需要在另一个指令中反映的数据时使用 $apply 是不好的做法吗?

Is it bad practice to use $apply when updating data in one directive that needs to be reflected in another directive?

我有一个容器和 children 指令,它们都会影响通过服务引用的数据。总体思路是,我希望能够单击 child 指令,并按照以下规则让它们成为 "selected"。并能够单击容器指令以清除 select 离子。

基本规则是:

以上所有规则实施起来都非常简单。我 运行 遇到的主要麻烦是最后一条规则。单击容器实际上会将 selected 值设置为 false,但是 UI 直到下一个用户操作才会更新。让容器的点击事件将对服务的调用包装在 $apply, "fixed it".

.directive('myContainer', function (dataService) {
    return {
        restrict: 'A',
        scope:{data:"="},
        link:function(scope, element, attrs){
            element.bind('click', function() {
                scope.$apply(function() {
                    dataService.clearSelectedChildren();
                });
            });
        }
    };
})

但是,我似乎已经准备好 $apply 通常用于数据的外部更新(angular 世界之外)(即对远程服务器的异步调用)?那么,我是否在滥用申请?如果是这样,我还能如何实现我的目标?

这是一个有效的JSFiddle供参考。

当您绑定自己的事件处理程序时...事件 在 angular 之外。在 ng-click angular 之类的指令中,您所做的事情几乎相同。换句话说,你确实需要通知 angular 到 运行 摘要