2
편집기 (양식)를 포함하는 지시문을 생성하려고합니다. 바깥 쪽 컨트롤러는 내부 지시어로 "편집 할 물건"을 쉽게 밀어 넣을 수 있습니다. 그러나 바깥 쪽 컨트롤러가 폼이 더러운지를 알기를 바랍니다. 내 전체 템플릿 (간체) :지시어 템플릿 안에있는 양식의 상태에 액세스하는 "각"방식이란 무엇입니까?
directive('accountEditor',[ 'account', function(account) {
return {
restrict: 'E',
scope: {
accountId: '=',
dirtyFlag: '='
},
link: function($scope, element, attr, ctrl) {
$scope.$watch('accountId', function() {
$scope.accountToEdit = account.getAccount($scope.accountId);
});
// I WANT TO WATCH THE FORM STATE, AND UPDATE dirtyFlag
},
template: '<form><input ng-model="accountToEdit.name"/></form>'
};
}]);
내가 <에 넣어 추가 지침을 작성해야 :
<div ng-controller="outer">
<account-editor account-id="currentID" dirty-flag="isDirty"></account-editor>
</div>
내가이 지시문은 "외부"컨트롤러의 IsDirty 사용 플래그를 업데이트해야 할 양식 >을 사용하거나 이벤트를 사용하거나 링크 중 DOM에 직접 액세스하거나 다른 것을 사용 하시겠습니까?
내 전체 코드는 http://jsbin.com/amuduro/1/edit이지만 더 많은 기능이 포함되어 있습니다. 에 양식 이름을 넣는
조금만 놀아주세요. 여기 하나의 중요한 개념이 있습니다. 범위에서 ** 프리미티브 **를 사용하여 하위 범위를 전달하지 마십시오. 객체를 넘겨 주면 원래 객체의 참조는 모든 자손 범위에서 가능합니다 ....'$ scope.model = {idx : 0, isDirty : false}'...'model'을 지시어 범위로 전달한 다음'model.isDirty = true'는 참조 된 객체를 트리 위로 등록합니다. – charlietfl
이 문이 "범위에있는 프리미티브를 사용하여 하위 범위를 통과하지 못하게합니다"라는 이유를 설명 할 수 있습니까? 이전에 읽었지만 왜 문제인지 명확하지 않습니다. – Darryl
ok ....'var a = {}, b = a' ...'b'는'a'의 복사본이 아닙니다. 어떤 변화라도 다른 것에 영향을 준다. (그들은 같은 객체이다.)'var x = "foo", y = x' .... 원시 타입 인'y'는'x'의 복사본이고, 하나를 변경하면 다른 것에 영향을주지 않습니다. 따라서 중첩 스코프에서 레이어를 깊숙이 확장하면 오브젝트를 5 개 깊이로 업데이트하면 모든 참조가 트리 (동일한 객체) 위로 업데이트됩니다. 자식 프리미티브를 업데이트하는 것은 자식 범위 – charlietfl