指令沟通指令?

时间:2015-06-22 23:40:25

标签: angularjs angularjs-directive

我有一个包含两个指令的页面。 1.列出项目的指令,这些项目上有一个属性,调用url 2.在同一页面上接受URL并显示它的指令

我想要做的是,当用户点击第一个指令中的一个项目时,将该item.url作为参数发送到第二个指令?

此方案的最佳做法是什么?

1 个答案:

答案 0 :(得分:1)

实现这一目标的方法很少:

公共父范围属性

具体而言,包含两个指令的父控制器都具有用于存储所选URL的属性。 然后将此属性传递给两个子指令。

e.g。

<parent>
  <directive-one data-selected-url="selectedUrl"></directive-one>
  <directive-two data-url-to-display="selectedUrl"></directive-two>
</parent>

广播事件

让指令一在两个指令共享的作用域上广播一个事件。

e.g。

指令一中的

$scope.$broadcast('urlSelected', selectedUrl); 
指令二中的

$scope.$on('urlSelected', function(event, selectedUrl) { ... });

注意:正如我所提到的,范围需要是两个指令之间的共享范围,因为广播将事件DOWN发送到范围链($ emit将其发送出去)。

访问家长控制器

您可以将选定的Url存储在父指令中,并让两个子节点都需要该指令。然后他们都可以从父指令设置/获取属性。

e.g。在子指令中:

require: 'parentDirective'
link: function (scope, element, attrs, parentCtrl) {...}