这两个选项都是可能的,取决于您构建组件的方式。
选项1 - 控制器应该注册侦听器/回调并设置指令的属性(当使用隔离范围 - 我推荐)。控制器不应调用指令函数,而应改变已在指令上绑定的属性。该指令如果设置正确应该看这个属性并相应地更新。
指令不应该知道他们的控制器是谁在我看来,它促进了解耦代码。相反,控制器应该设置指令可以在适当的时候调用的回调函数(即让控制器知道点击,选择,删除,刷卡等等)
选项2 - 可以接受当您构建提供结构和行为逻辑但未定义实际单个组件UI(不包括可能的骨架UI)的Web组件时。例如一个list指令。单个列表可能没有在指令中定义,而是针对每个上下文或使用“插入”,给我们一个更模块化和可重用的组件。它确实要求我们了解一些关于指令的事情。它还要求我们修改拦截功能,以在转移内容上使用指令作用域,而不是原始控制器作用域。举个例子,你可以签出一个列表组件作为例子。
http://github.com/Spidy88/ng-web-components
文本从这个html page片段。 sf-list指令是一个隔离的范围指令,用于定义列表行为。不过,我们仍然可以通过修改后的包含式来定义每个单独的列表项的外观。它依靠我们呼叫selectItem
虽然为了触发列表上的选择行为。
<sf-list items="ctrl.emails" listener="ctrl.adapter">
<div class="list-item email" ng-click="selectItem(item)" ng-repeat="item in items track by item.id">
<div class="from">{{ item.from }}:</div>
<div class="subject">{{ item.subject }}</div>
</div>
</sf-list>
感谢Spidy。你说'而不是应该改变一个已经绑定在指令上的属性吗?你可以举一个属性的例子,当改变时触发一个函数调用? – ps0604 2014-11-05 18:42:01
对于这个“点击”的特定示例,我想不出如何或为什么要改变属性来触发函数调用。看看我更新的最后一段,我认为更好地回答你在选项2中要做的事情。 – Spidy 2014-11-05 18:45:08