我有一個稱爲addressesForUser
的地址數組。我也有一個隔離範圍的「地址」指令。打印時分析角度值,但不是指令屬性
當我這樣做:
<div ng-repeat="add in addressesForUser" entryid="{{ add.id }}">{{ add.id }}</div>
一切都很好,和三個地址,我得到以下生成的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,它將顯示一個表單以輸入新地址。後一部分工作正常,但我不明白爲什麼它不讀取入口值。
編輯:當我不使用隔離作用域(即從指令中刪除「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);
}
});
}
}
}]);
我認爲你需要發佈你的地址的指令代碼,更好地理解這個問題,一個[plunker ](plnkr.co/edit /)例子會更好,無論如何,我認爲這是因爲隔離,有什麼問題,沒有看到指令的代碼,我不知道。 –
用指令代碼更新原始文章。這是隔離範圍,它可以工作,如果我刪除隔離,但在這種情況下,我需要它。 – Swader
正如你在答案中所說的解決方案'範圍:{entryid:'='}',但這就是如果你打算在模板中使用它,鏈接函數是[@Josh David Miller](http:///stackoverflow.com/users/259038/josh-david-miller)在他的回答中說。 –