주소 배열이 addressesForUser
인 배열이 있습니다. 나는 또한 고립 된 범위를 가진 "주소"지시어를 가지고있다.인쇄 할 때 각도 값이 구문 분석되지만 지시문 특성이 아님
나는이 작업을 수행 할 때 :
<div ng-repeat="add in addressesForUser" entryid="{{ add.id }}">{{ add.id }}</div>
모두가 잘, 3 개 주소 나는 다음 생성 된 HTML 얻을 :
<div entryid="1">1</div>
<div entryid="2">2</div>
<div entryid="3">3</div>
을하지만 난이 수행 할 때
<address ng-repeat="add in addressesForUser" entryid="{{ add.id }}"></address>
을
그리고 지시문의 연결 함수 내에서 console.log(attrs.entryid)
을 시도하면 출력에 "add.id"라는 문자열이 생깁니다. . 더 나쁜 것은 생성 된 html의 속성이 정의되지 않았기 때문입니다. 속성 이름 만 있습니다. 따라서 1에서 3까지의 숫자도 아니며 "add.id"라는 문자열도 아닙니다.
내가 뭘 잘못하고 있니? 최종 목표는 entryid 속성에서 각 주소 지시문을 읽는 것이므로 독립적으로 자동 채우기 및 주소 카드 생성이 가능하며 entryid가없는 경우 새 주소를 입력하는 양식이 표시됩니다. 후자 부분은 잘 작동하지만 entryid 값을 읽지 않는 이유를 이해할 수 없습니다.
편집 : 분리 된 범위를 사용하지 않으면 (즉, 지시어에서 "scope : {}"이 (가) 제거되면) 작동합니다. 하지만 범위를 분리해야하기 때문에 개별 지시문의 범위에 특성을 포함시킬 수있는 방법이 필요하다고 생각합니다. 다음은 약간 삭제 된 주소 지시문 코드입니다.
myapp.directive('address', ['GeoService', '$http', function (gs, http) {
return {
restrict: 'E',
templateUrl: 'address.html',
scope: {
},
link: function (scope, element, attrs) {
scope.emptyForm = {
first_name: '',
last_name: '',
country: '',
city: '',
street: '',
phone: '',
is_def: '',
zip: '',
additional_info: '',
residence_type: ''
}
console.log(attrs.entryid);
scope.countries = gs.countries();
scope.resetAddressForm = function(e) {
scope.newAddressForm = scope.emptyForm;
}
scope.saveAddress = function() {
http.post('/users/saveaddress', scope.newAddressForm).then(function (response) {
console.log(response.data); // Do something
});
}
scope.$watch('newAddressForm.country', function(v) {
if (v != undefined) {
scope.cities = gs.cities(v);
}
});
}
}
}]);
:
@
로 정의하면, 당신은 보간 된 값을 얻을 수attrs.$observe()
또는scope.$watch()
을 사용할 수 있습니다 ] (plnkr.co/edit/) 예제가 더 좋을 것입니다. 어쨌든 격리로 인해 거기에 뭔가 잘못된 것이 있습니다. 지시어의 코드를 보지 않고는 말할 수 없습니다. –지시문 코드가있는 원본 게시물이 업데이트되었습니다. 격리를 제거하면 범위가 분리되고 작동하지만이 경우에는 필요합니다. – Swader
당신의 답변에서'scope : {entryid : '='}'라고 말했듯이, 템플릿에서 그것을 사용한다면, 링크 기능은 [@Josh David Miller] (http : /stackoverflow.com/users/259038/josh-david-miller) 그의 대답에 말했다. –