Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用来自不同控制器的指令并与之通信_Javascript_Angularjs_Angularjs Directive_Angularjs Scope - Fatal编程技术网

Javascript 使用来自不同控制器的指令并与之通信

Javascript 使用来自不同控制器的指令并与之通信,javascript,angularjs,angularjs-directive,angularjs-scope,Javascript,Angularjs,Angularjs Directive,Angularjs Scope,我想创建一个类似于控件的指令。它应该能够从“任何地方”实例化,我想从父作用域/控制器调用它作用域上的函数 一个非常简单的例子是: 我有一个名为myContactForm的特殊指令(可以在不同的地方和页面中使用)。现在,这个myContactForm在它的templace中使用了指令myEditControl。myEditControl是,当您查看模板时,除了一个输入和一个按钮外,没有其他内容,并且在作用域中有函数“clear()”,因此您可以删除输入中的任何内容,也可以删除其他函数 现在,当my

我想创建一个类似于控件的指令。它应该能够从“任何地方”实例化,我想从父作用域/控制器调用它作用域上的函数

一个非常简单的例子是:

我有一个名为myContactForm的特殊指令(可以在不同的地方和页面中使用)。现在,这个myContactForm在它的templace中使用了指令myEditControl。myEditControl是,当您查看模板时,除了一个输入和一个按钮外,没有其他内容,并且在作用域中有函数“clear()”,因此您可以删除输入中的任何内容,也可以删除其他函数

现在,当myContactForm中发生某些事情时(例如,按下按钮或接收到广播等),我想在myEditControl中调用“clear()”。就像是正常对照

怎么做?

我知道require,但这只适用于家长,我必须知道使用myEditControl的指令的Controllername。相反,我希望任何视图/控制器都能够使用myEditControl。我不能从myContactForm中要求myEditControl控制器,因为它是子级而不是父级

解决这类问题的方法是什么?


我的想法是将回调或“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
的一个明显例子。我的印象是你需要用另一种方式来做。对不起:)