我有一页有两条指令。1.列出项目的指令,这些项目上有一个属性调用url 2。在接受url并显示它的同一页上的指令。
我想要做的是,当用户单击第一个指令中的一个项时,将该item.url作为参数发送到第二个指令?
这个场景的最佳实践是什么?
发布于 2015-06-23 03:01:23
实现这一目标的途径不多:
公共父范围属性
具体来说,包含这两个指令的父控制器具有一个用于存储所选URL的属性。然后将该属性传递到两个子指令中。
例如:
<parent>
<directive-one data-selected-url="selectedUrl"></directive-one>
<directive-two data-url-to-display="selectedUrl"></directive-two>
</parent>
广播事件
让指令一在两个指令共享的范围上广播事件。
例如:
在指令一中:
$scope.$broadcast('urlSelected', selectedUrl);
在指令二中:
$scope.$on('urlSelected', function(event, selectedUrl) { ... });
注意:正如我提到的,范围需要是两个指令之间的共享作用域,因为广播将事件发送到作用域链中($emit向上发送)。
访问父控制器
您可以将选定的Url存储在父指令中,并且这两个子指令都需要该指令。然后,它们都可以从父指令中设置/获取属性。
例如,在儿童指令中:
require: 'parentDirective'
link: function (scope, element, attrs, parentCtrl) {...}
https://stackoverflow.com/questions/30991646
复制相似问题