Javascript 使用来自不同控制器的指令并与之通信
我想创建一个类似于控件的指令。它应该能够从“任何地方”实例化,我想从父作用域/控制器调用它作用域上的函数 一个非常简单的例子是: 我有一个名为myContactForm的特殊指令(可以在不同的地方和页面中使用)。现在,这个myContactForm在它的templace中使用了指令myEditControl。myEditControl是,当您查看模板时,除了一个输入和一个按钮外,没有其他内容,并且在作用域中有函数“clear()”,因此您可以删除输入中的任何内容,也可以删除其他函数 现在,当myContactForm中发生某些事情时(例如,按下按钮或接收到广播等),我想在myEditControl中调用“clear()”。就像是正常对照 怎么做? 我知道require,但这只适用于家长,我必须知道使用myEditControl的指令的Controllername。相反,我希望任何视图/控制器都能够使用myEditControl。我不能从myContactForm中要求myEditControl控制器,因为它是子级而不是父级 解决这类问题的方法是什么?Javascript 使用来自不同控制器的指令并与之通信,javascript,angularjs,angularjs-directive,angularjs-scope,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,我想创建一个类似于控件的指令。它应该能够从“任何地方”实例化,我想从父作用域/控制器调用它作用域上的函数 一个非常简单的例子是: 我有一个名为myContactForm的特殊指令(可以在不同的地方和页面中使用)。现在,这个myContactForm在它的templace中使用了指令myEditControl。myEditControl是,当您查看模板时,除了一个输入和一个按钮外,没有其他内容,并且在作用域中有函数“clear()”,因此您可以删除输入中的任何内容,也可以删除其他函数 现在,当my
我的想法是将回调或“myContactForm”作用域传输给带有属性的myEditControl,这样myEditControl可以在父级上“注册”自己,然后父级保存该控件作用域,以供以后引用和调用函数。但这似乎很令人讨厌……你不应该这样做。这是一种反模式。如果您坚持这样做,请阅读有关
$scope.$emit
和$scope.$broadcast
的内容。如果是反模式:您能给我一个解决方案吗?因此,我的问题是“如何做到这一点?”以及“angular中用于解决此类问题的技术是什么?”。如果有其他选择,我不会坚持这样做!您需要在myContactForm
上定义一个$scope.clear
函数。然后将其传递给myEditControl的作用域(作用域:{parentClear:'=clear'}
)。然后在myEditControl
的$scope.clear
函数中,您还可以调用$scope.parentClear
,它是在myContactForm
中定义的。这样指令就不会以任何方式耦合,唯一的要求是myEditControl
需要父作用域中的clear
功能。它不需要它。你可以检查它是否是未定义的(scope:{parentClear:'=?clear'}
),只有当它不是(scope:{parentClear:'=?clear'})时才调用它,我想从myContactForm
调用myEditControl
的clear函数,因为myContactForm决定清除编辑。然后它是$scope.$broadcast
和$scope.$on
的一个明显例子。我的印象是你需要用另一种方式来做。对不起:)