2013-10-28 113 views
4

我試圖用編程方式填充輸入列表。AngularJS - 將ngModel綁定到存儲在屬性中的對象

我有類似

<div ng-repeat="field in fields"> 
<input ng-model="field.Binding" /> 
</div> 

var Query = { 
    Keywords: "Foo", 
    Title: "Bar" 
} 

var Fields = [{ 
    Name: "Keywords", 
    Binding: Query.Keywords 
}, { 
    Name: "Title", 
    Binding: Query.Title 
}]; 

var myApp = angular.module('myApp', []); 

function MyCtrl($scope) { 
    $scope.fields = Fields; 
    $scope.query = Query; 
} 

非工作撥弄@http://jsfiddle.net/VSph2/52/ 當我開始我的觀點的字符串被複制,但是這兩個值不更新海誓山盟。

Basicallyk我想綁定到引用或名稱指定的對象,例如「Query.Keywords」,並讓範圍在運行時評估 - 但我沒有太多的運氣。

正如您可以在小提琴中看到的,我的值不會保持同步。

回答

3

感謝扎克的轉向我在正確的方向。

無論如何,如果你使用一個字符串值綁定比如

場{結合:「富」}

然後,您可以綁定到數據[Field.Binding],這將只是工作精細。我的第一個例子不工作,因爲它綁定到字符串值,而不是我的數據的屬性本身。

工作小提琴@http://jsfiddle.net/VSph2/57/

function cQuery() { 
    this.Keywords= "Foo"; 
    this.Title = "Bar"; 
} 
var Query = new cQuery(); 
var Fields = [{ 
    Name: "Keyword Search", 
    Binding: "Keywords" 
}, { 
    Name: "Title Search", 
    Binding: "Title" 
}]; 


var myApp = angular.module('myApp', []); 

function MyCtrl($scope) { 
    $scope.blah = Object.keys(Query); 
    $scope.fields = Fields; 
    $scope.query = Query; 
} 

<div ng-controller="MyCtrl"> 
    <div ng-repeat="field in fields">{{field.Name}} 
     <input type="text" ng-model="query[field.Binding]" type="text" class="form-control" id="{{field.Id}}" /> {{field.Binding}} 
    </div>Elsewhere... 
    <input ng-model="query.Keywords" type="text"/> {{query.Keywords}} 
</div> 
+0

零件'''ng-model =「query [field.Binding]」'''正是我所期待的。謝謝! – mvndaai

+1

我試過了所有我能想到的,但不是這個簡單的'query [field.Binding]'語法。非常感謝你節省了我的一天! – Duc

1

我編輯了你查看數據的方式。希望這有助於。

http://jsfiddle.net/VSph2/42/

Removed query, attached input directly to fields. 
+0

我更新了我的小提琴。查詢存在於一個更大的項目中,並且基本上是我從中訪問參數的單例。 – Yablargo

+1

好的,你需要更新Query對象嗎?或者你可以只更新字段對象? –

+0

我需要更新查詢對象。我正在使用「字段」在ng-repeat循環中生成一堆(如一百個)可配置的查詢參數 – Yablargo

相關問題