我有两个嵌套在单个控制器下的指令。当我将鼠标悬停在第一个指令中的元素上时,我想突出显示第二个指令中的相关元素。目前,我在第一个指令中发出一个事件和数据:
// 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
});
我想我的主要问题是,是否有更好的方法让第一个指令或控制器告诉第二个指令做某事。
答案 0 :(得分:3)
另一种选择是让他们通过您将注入每个服务的服务进行沟通。
该服务很好地隔离了这种通信,但据我所知,优势是微不足道的,除非是非常频繁地调用性能。
最重要的是,我认为你也可以通过父范围内的共享对象进行通信,并将其传递给每个指令的隔离范围。
答案 1 :(得分:1)
该服务是一个很好的解决方案,但您也可以尝试以下方法:
在您的第一个指令中,您可以执行以下操作,而不是$发出事件:
$scope.$parent.$broadcast('highlight-child', elms);
在你的section指令中,只需捕获事件:
$scope.$on('highlight-child', function (event, elms) {
// highlight the elements
});