다른 지시문 ("parent") 안에 중첩 된 지시문 ("child")이 있습니다. require
ngModel 및 ngModelCtrl.$modelValue
이 표시되며 최신 템플릿으로 유지됩니다. 즉, ngModelCtrl. $ setViewValue()를 호출 할 때까지입니다.
angular.module('form-example2', [])
.controller('MainCtrl', function($scope){
$scope.content = 'Hi';
})
.directive('parent', function() {
return {
transclude: true,
template: '<div ng-transclude></div>',
controller: function(){
},
scope: {}
};
})
.directive('child', function() {
return {
require: ['ngModel', '^parent'],
transclude: true,
template: '<div>Model: {{model.$modelValue}} (<a style="text-decoration: underline; cursor: pointer;" ng-click="alter()">Alter</a>)<br />Contents: <div style="background: grey" ng-transclude></div></div>',
scope: {},
link: function(scope, elm, attrs, ctrl) {
var ngModelCtrl = ctrl[0];
var parentCtrl = ctrl[1];
scope.model = ngModelCtrl;
// view -> model
scope.alter = function(){
ngModelCtrl.$setViewValue('Hi2');
}
// model -> view
// load init value from DOM
}
};
});
하는 모델 (즉 content
) 변화,이 변화는 아이 안에 볼 수 있습니다 : 그래서 여기
이 지침 초기화하는 HTML입니다 : 지시어는
<div parent>
<div child ng-model="content">Some</div>
</div>
그리고 여기입니다 지령. $ setViewValue() 호출을 트리거하는 "변경"링크를 클릭하면 모델의 값이 "Hi2"가됩니다. 이것은 child
지시문 안에 올바르게 표시되지만 지시문 외부의 모형에는 표시되지 않습니다. 또한 지시문 외부의 모델을 업데이트하면 더 이상 지시문 내부에서 업데이트되지 않습니다.
어째서?
감사를 투표를 줄
는 @ 조셉의 대답은 당신이 읽고있는 경우는, 실제 솔루션을 제공하지 않은 경우에도, 그렇게 크게 도움 그것은 유용합니다. 그래서 그 진술이 틀렸다면, 위의 그림과 같이 그것을 변경하면 그 이유가 무엇입니까? 또한 ngModel이 "현재"범위에 바인딩하면이 경우 제어기의 범위 하위가 아닌지? 부모 지시어를 사용하면 중첩 된 내용의 범위가 부모 지시문의 범위에 포함됩니다. 그리고 그것은'콘텐트'가 컨트롤러의 모델을 여전히 참조한다는 것을 의미 할 것입니다, 그렇죠? – Vincent나는 분명히 이해하기를 원한다. 그래서 나는이 모든 질문을하고있다. :) 그래서 'scope.model = ngModelCtrl;'에 대해 말하는 것은 의미가있다. 그러나, 내가 그것을하지 않을 때 (그것은 실제로 더 깨끗합니다), 그것은 여전히 원시적 인 모델로는 작동하지 않습니다 : http://plnkr.co/edit/oAJ7cvWSj1PmHbA7VL36?p=preview 왜 그런지 알았습니까? ? 또한 답변을 삭제 했습니까? :( – Vincent