업데이트
jqLite extras methods 또한 소자에 관련된 특정 컨트롤러를 검색하는 제어 수단을 갖는다. 따라서 ng 모델을 쿼리하고 컨트롤러 이름을 angular.element(el).controller('ngModel')
으로 가져올 수 있습니다.
컨트롤러 (이름) - 현재 요소 또는 해당 상위의 컨트롤러를 검색합니다. 기본적으로 ngController 지시문과 연관된 컨트롤러를 검색합니다. 이름이 camelCase 지시어 이름으로 제공되면이 지시어의 컨트롤러가 검색됩니다 (예 : 'ngModel'). 각
또한 그 데이터에 요소와 연결된 제어기를 놓는다. 마찬가지로 지시문과 연결된 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
출처
2015-01-07 01:44:26
PSL
감사합니다. 이것이 해결책입니다. crutial 부분은 "return angle.element (el) .data ('$ ngModelController');"입니다. 이 줄은 다음과 같이 작성할 수도 있습니다. "return angle.element (el) .controllwe ('ngModel');". 그 수정과 함께 Plnkr에 링크 http://plnkr.co/edit/shn6978dFkH3YFfkUnRy?p=preview – Christian
오오 그렇습니다. 사실 저는 이것에 대한 jqlite 엑스트라를 잊어 버렸습니다. 감사. 나는 나의 대답을 업데이트 할 것이다. – PSL