Angularjs:通过父控制器在兄弟指令之间共享数据的最佳实践

时间:2015-04-02 18:16:52

标签: javascript angularjs

我有两个嵌套在单个控制器下的指令。当我将鼠标悬停在第一个指令中的元素上时,我想突出显示第二个指令中的相关元素。目前,我在第一个指令中发出一个事件和数据:

// on hover
$scope.$emit('highlight', elms);

控制器监听,然后广播新事件和数据:

$scope.$on('highlight', function (event, elms) {
    $scope.$broadcast('highlight-child', elms);
});
我的第二个指令侦听的

$scope.$on('highlight-child', function (event, elms) {
    // highlight the elements
});

我想我的主要问题是,是否有更好的方法让第一个指令或控制器告诉第二个指令做某事。

2 个答案:

答案 0 :(得分:3)

另一种选择是让他们通过您将注入每个服务的服务进行沟通。

该服务很好地隔离了这种通信,但据我所知,优势是微不足道的,除非是非常频繁地调用性能。

最重要的是,我认为你也可以通过父范围内的共享对象进行通信,并将其传递给每个指令的隔离范围。

答案 1 :(得分:1)

该服务是一个很好的解决方案,但您也可以尝试以下方法:

在您的第一个指令中,您可以执行以下操作,而不是$发出事件:

$scope.$parent.$broadcast('highlight-child', elms);

在你的section指令中,只需捕获事件:

$scope.$on('highlight-child', function (event, elms) {
    // highlight the elements
});