Ich habe ein Problem mit ng-Modell auf einem select
Element beim Übergeben eines Objekts von option
Elemente. Also, stellen wir eine Reihe von Spalten aus einer Tabelle columns
genannt (die Tabelle Definition), und wir möchten, dass einige Filter auf dieser Definition creatWie funktioniert angular ng-model mit Objekten in ausgewählten Elementen?
var columns = [
{name: 'Account ID', type: 'numeric'},
{name: 'Full name', type: 'text'},
{name: 'Date of birth', type: 'date'},
{name: 'Active', type: 'boolean'}
// and so on
];
var filters = [{}];
HTML:
<div class="form-field" ng-repeat="filter in filters">
<select ng-model="filter">
<option value="" disabled>Choose filter</option>
<option ng-repeat="column in columns" ng-value="column">{{column.name}}</option>
</select>
<input type="text" ng-model="filter.value">
</div>
Wie können Sie sehen, würde ich diese filter
mag den Wert von column
zu erhalten und spezifischen Daten in ihm hinzuzufügen, so zu einem bestimmten Zeitpunkt, könnte mein Filter sein wie:
[
{name: 'Account ID', type: 'numeric', value: 123},
{name: 'Active', type: 'boolean', value: 'Yes'}
]
Wie auch immer, ich bin mir nicht sicher, ob dies der richtige Weg ist, aber ich würde gerne wissen, wie ich dieses Verhalten erreichen kann, ohne viel Code in den Controller schreiben zu müssen.
Ich habe einige Abhilfe diese ng-change
zu erhalten getan mit, vorbei an der filter
und die column.name
, die Spalte in der columns
Array finden, erhalten die type
Eigenschaft, aktualisieren Sie die filter
, aber ich glaube wirklich, dass es eine einfachere Antwort zu Dies.
Ich habe aktualisiert, dass Plunker 1.1 zu verwenden. 5 und es funktioniert immer noch gut. – noj
Hmmm, wierd ... es funktioniert auf Plunker, aber nicht auf meiner lokalen Maschine. Wie auch immer ... wieso funktioniert es, wenn ich an "filter.value" binde, aber nicht direkt an "filter"? Irgendwie brauche ich die gleiche Struktur wie die Definition der Tabelle :) –
Es ist wie javascript verhält sich beim Festlegen von Werten für untergeordnete Bereiche. Es ist ein bisschen viel in einem Kommentar zu erklären, siehe [diese Frage] (http://stackoverflow.com/questions/14049480/what-are-the-nuances-of-scope-prototypal-prototypic-inheritance-in-angularjs). Um dies zu umgehen, können Sie die Eigenschaft $ index einer ng-repeat-Schleife verwenden, um den Wert festzulegen. Siehe den aktualisierten [plocker] (http://plnr.co/edit/C3ojySE0x6XbDwHkCD7u?p=preview). – noj