我有一个指令附加到表单元素和嵌套在表单元素的不同子作用域内的各种ng-click事件(例如ng-if,ng-repeat)。
我希望form指令能够监视和拦截任何ng-click,但似乎无法以通用方式挂钩事件或子作用域属性。
演示:http://plnkr.co/edit/6WdIo5r2FtYWPExBGUru
HTML
<body ng-controller="MainCtrl">
<form my-form-directive>
<div ng-controller="SubCtrl">
<a ng-click="changeName()">click me</a>
</div>
</form>
</body>
的javascript
var app = angular.module('plunker', []);
app.controller('MainCtrl', function($scope) {
});
app.controller('SubCtrl', function($scope) {
$scope.name = 'John';
$scope.changeName = function() {
$scope.name = 'Peter';
}
});
app.directive('myFormDirective',
function() {
return {
link: function($scope, element, attrs, controller) {
// would like to watch for either ng-click or $scope.name
// change and print 'Peter' to the console.log
// don't assume we know nested location of element with
// ng-click attached (ok to catch all form ng-click events)
}
};
}
);
任何帮助将不胜感激, 感谢。
答案 0 :(得分:0)
你需要做一些事情来完成这项工作
首先,我添加了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>
将范围参数name
添加到指令
<强> HTML 强>
<form my-form-directive name="name">
<强> JS 强>
scope: { name: '=' },
最后,在指令中,使用ng-click
收听所有元素,并在点击时触发click
事件。
<强> JS 强>
element.find('[ng-click]').on('click', function(){
console.log($scope.name);
});
示例:http://plnkr.co/edit/7lVWjjT2mssmcBD7uP1Z?p=preview
如果您需要纯角度解决方案,可以将指针添加到指令$scope.name
<强> JS 强>
$scope.$watch(
function(){ return $scope.name; },
function(){ console.log($scope.name); }
);