Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.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 角度捕捉子范围ng单击或属性更改_Javascript_Angularjs_Angularjs Scope - Fatal编程技术网

Javascript 角度捕捉子范围ng单击或属性更改

Javascript 角度捕捉子范围ng单击或属性更改,javascript,angularjs,angularjs-scope,Javascript,Angularjs,Angularjs Scope,我在表单元素上附加了一个指令,并在表单元素的不同子范围内嵌套了各种ng click事件(例如ng if、ng repeat) 我希望form指令能够监视和拦截任何ng单击,但似乎无法以通用方式连接到事件或子范围属性 演示: html <body ng-controller="MainCtrl"> <form my-form-directive> <div ng-controller="SubCtrl"> <a ng-c

我在表单元素上附加了一个指令,并在表单元素的不同子范围内嵌套了各种ng click事件(例如ng if、ng repeat)

我希望form指令能够监视和拦截任何ng单击,但似乎无法以通用方式连接到事件或子范围属性

演示:

html

<body ng-controller="MainCtrl">
    <form my-form-directive>
      <div ng-controller="SubCtrl">
        <a ng-click="changeName()">click me</a>
      </div>
    </form>
  </body>
任何帮助都将不胜感激,
谢谢。

你需要做几件事才能让这一切顺利进行

首先,我添加了jQuery以使用
find
函数

接下来,我们需要在
SubCtrl
控制器中移动指令

HTML

<body ng-controller="MainCtrl">
  <div ng-controller="SubCtrl">
    <form my-form-directive name="name">
      <a ng-click="changeName()">click me</a>
    </form>
  </div>
</body>
 <form my-form-directive name="name">
JS

 scope: { name: '=' },
element.find('[ng-click]').on('click', function(){
  console.log($scope.name);
});
$scope.$watch(
  function(){ return $scope.name; }, 
  function(){ console.log($scope.name); }
);
最后,在指令中,使用
ng click
收听所有元素,并在单击时触发
click
事件

JS

 scope: { name: '=' },
element.find('[ng-click]').on('click', function(){
  console.log($scope.name);
});
$scope.$watch(
  function(){ return $scope.name; }, 
  function(){ console.log($scope.name); }
);
例如:

如果需要纯角度解决方案,可以在指令
$scope.name

JS

 scope: { name: '=' },
element.find('[ng-click]').on('click', function(){
  console.log($scope.name);
});
$scope.$watch(
  function(){ return $scope.name; }, 
  function(){ console.log($scope.name); }
);

示例:

为什么
*[ng click]
而不是
[ng click]
?谢谢,
[ng click]
也会起作用,可能更有效。更新的solutionelement.find()仅适用于包含jQuery的选择器。有效,但不是“仅角度”解决方案*[ng click]捕捉数据ng click等@JoeEnzminger。是的,你说得对。我忘了提到我添加了jQuery。更新您的目标是实现什么功能?如中所示,您为什么希望能够拦截任何ng点击?