![](/img/trans.png)
[英]AngularJS UI-Router: Two way binding between resolved object in child/parent state—Child state won't update
[英]Two way binding with AngularJS select for a child object
我有這個選擇元素的角度形式:
<select ng-model="expense.category" ng-options="category.code for category in categories"></select>
這里的費用是我要創建和編輯的對象,形式和費用。category指向子對象類別(具有屬性“ id”和“ code”),該類別將由此控件選擇。
所有這些都非常適合創建新費用-按應有的方式保存類別。 加載用於編輯所有內容的費用時,也可以-費用在控制器中具有其類別。 但是,盡管所有類別均已加載到select元素中,但在select表單上並沒有預先填充正確的類別條目,它為空。 因此,對於select字段,綁定只能以一種方式(從表單到模型)起作用,而不能以另一種方式(從模型到表單)起作用。 但是,所有其他字段(費用屬性)都正確地填寫到了編輯表單中。
任何想法如何解決這個問題?
ng-options
和ng-model
之間的比較是通過引用而非值來完成的。 我懷疑您的expense.category
在加載時是與categories
數組中的實體分開的實體。 您可能應該使用category
的categories
填充您的expense.category
。 另一個選擇是用下拉列表替換選擇。 這將代表更多的代碼(您必須在ng-click上自己處理綁定),但會為您提供更多的比較和顯示控制。
expense.category
模型必須是categories
數組中的現有項目。
要做到這一點,您可以做的是在數組中搜索正確的項(借助於code屬性),並用categories
數組中的引用替換現有的副本 。
可以這樣完成:
myApp.controller('ctrl', function($scope) {
$scope.categories = [{code: 'sport'}, {code: 'music'}, {code: 'culture'}];
$scope.expense = {category: {code: 'sport'}};
function replaceWithReference(expense) {
var code = expense.category.code;
for(var i=0; i < $scope.categories.length; i++) {
if($scope.categories[i].code === code) {
expense.category = $scope.categories[i];
return;
}
}
}
replaceWithReference($scope.expense);
});
這是工作的jsfiddle-demo
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.