AngularJS:以正确的方式从控制器调用指令函数
我有两种情况: 从指令调用控制器中定义的函数。 该指令包含一个“&”范围限制,用于关联控制器和指令功能。如果单击文本,将在指令中触发元素单击事件,并调用控制器函数$scope.$apply用于通知AngularJS单击事件,并刷新屏幕上的var值 指令中定义的函数从控制器调用。 该指令没有任何范围限制,这意味着控制器中的$scope和指令中的scope是共享的。我在指令中定义了func1,可以从控制器中调用。请尝试单击文本,但这似乎有干扰性,因为控制器需要知道函数的名称AngularJS:以正确的方式从控制器调用指令函数,angularjs,Angularjs,我有两种情况: 从指令调用控制器中定义的函数。 该指令包含一个“&”范围限制,用于关联控制器和指令功能。如果单击文本,将在指令中触发元素单击事件,并调用控制器函数$scope.$apply用于通知AngularJS单击事件,并刷新屏幕上的var值 指令中定义的函数从控制器调用。 该指令没有任何范围限制,这意味着控制器中的$scope和指令中的scope是共享的。我在指令中定义了func1,可以从控制器中调用。请尝试单击文本,但这似乎有干扰性,因为控制器需要知道函数的名称 是否有一种方法可以定义f
是否有一种方法可以定义func1,使函数名在指令div中声明,类似于场景1?这两个选项都是可能的,并且可以接受,具体取决于您构建组件的方式 选项1-控制器应在使用隔离作用域时注册侦听器/回调,并在指令上设置属性-我建议这样做。控制器不应调用指令函数,而应更改已绑定到指令上的属性。如果安装正确,则指令应该监视此属性并相应更新 在我看来,指令不应该知道它们的控制器是谁,它促进了代码的解耦。相反,控制器应该设置回调函数,指令可以在适当的时间调用这些函数,即让控制器知道某些东西被单击、选择、删除、刷过等等 选项2-当您构建一个提供结构和行为逻辑但不定义实际单个组件UI(不包括可能的框架UI)的web组件时,我可以接受。例如,list指令。指令中可能没有定义单独的列表,而是针对每个上下文或使用插入,从而为我们提供了一个更模块化和可重用的组件。它确实要求我们了解有关该指令的一些情况。它还要求我们修改transclusion函数,以便在转写的内容上使用directives作用域,而不是原始controllers作用域。例如,您可以签出我制作的列表组件作为示例 这篇文章的一段文字。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>
谢谢你,斯皮迪。您说应该更改已绑定在指令上的属性,您能给出一个属性更改后触发函数调用的示例吗?对于这个单击的特定示例,我想不出您将如何或为什么更改属性以触发函数调用。看看我更新的最后一段,我认为更好地回答了你在选项2中试图做的事情。