更新
jqLite extras 方法也有一个控制器方法来检索与元素关联的特定控制器。因此,您也可以查询 ng-models 并获取控制器名称angular.element(el).controller('ngModel')
。
controller(name) - 检索当前元素或其父元素的控制器。默认情况下检索与 ngController 指令关联的控制器。如果 name 作为 camelCase 指令名称提供,则将检索该指令的控制器(例如“ngModel”)。
angular 还将与元素关联的控制器放置在其数据上。同样,与指令关联的 ngModel 控制器实例可通过$ngModelController
. 所以你实际上可以访问它并使用 ngModel 实例来做你正在做的任何事情。然而,这完全是一种非标准的做法,因为$ngModelController
没有记录,并且不能保证在未来的版本中实现不会改变。
一个示例实现:
.directive('parentDirective', function($timeout){
return{
restrict:'E',
link:function(scope, elm){
/*Get the elements with the attribute ng-model, in your case this could just be elm.children()*/
var elms = [].slice.call(elm[0].querySelectorAll('[ng-model]'), 0);
/*get the ngModelControllerArray*/
var controllers = elms.map(function(el){
return angular.element(el).controller('ngModel');
//return angular.element(el).data('$ngModelController');
});
/*As a sample implementation i am registering a view value listener for these controller instances*/
controllers.forEach(function(ngModel){
ngModel.$viewChangeListeners.push(logViewChange.bind(null, ngModel));
});
function logViewChange(ngModel){
console.log(ngModel.$name, ngModel.$viewValue);
}
}
}
});
PLNKR