我有一个包含两个指令的页面。 1.列出项目的指令,这些项目上有一个属性,调用url 2.在同一页面上接受URL并显示它的指令
我想要做的是,当用户点击第一个指令中的一个项目时,将该item.url作为参数发送到第二个指令?
此方案的最佳做法是什么?
答案 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) {...}