2016-05-12 26 views
1

Es scheint, dass sich das Verhalten von angular mit dem ausgewählten Attribut bei jeder Hauptversion geändert hat. Also suche ich einfach jemanden, der mir sagt, ob dies in der Version 1.5.x mit ng-Optionen statt mit ng-repeat erreichbar ist.Ausgewähltes Attribut für Einzel-/Mehrfachauswahl mit ng-Optionen festlegen

Was ich versuche zu tun: Winkel Haben html wie das schaffen folgende (so dass sie durch ein jQuery-Plugin interpretiert werden kann)

<select multiple="multiple"...> 
<option value="abc123" label="Justin" selected="selected">Justin</option> 
</select> 

Ich habe viele Variationen dieses

versucht
<select ms-multi-listbox multiple="multiple" class="multi-select" 
id="ym" name="ym" ng-model="groupCtrl.memSelection" 
ng-options="mem as mem.displayName for mem in groupCtrl.selectableMembers track by mem.id"> 

ohne Glück.

das Modell sieht wie folgt aus:

groupCtrl.memSelection =["abc123"];//inbound from api as is selectableMembers 

Hier ist ein zupfen Ich habe mit gespielt (versuchen Sie die abgewinkelte Ausführung für noch mehr Verwirrung zu ändern): Plunker

Alle Ideen sind willkommen .. I Hauptsächlich wollte ich ng-repeat vermeiden, da es in längeren Listen viel Overhead hat, aber offensichtlich langsam ist besser als nicht funktionieren, also werde ich es benutzen, bis ich lerne, wie man das mit ng-Optionen macht.

Danke!

edit: Hier ist eine ng-Wiederholung, die das Ergebnis mag ich erreicht:

<option ng-repeat="mem in groupCtrl.selectableMembers" value="{{mem.id}}" label="{{mem.displayName}}" ng-selected="groupCtrl.memSelection.indexOf(mem.id)>=0">{{mem.displayName}}</option> 
enter code here 
+0

Wenn ich Sie richtig verstehe, möchten Sie ein Attribut basierend auf Auswahl festlegen. Sie benötigen dafür eine benutzerdefinierte Anweisung. – Kyle

+0

Ja, ich möchte das Attribut 'selected' auf dem Options-Tag setzen. Angular tut dies in einigen Fällen (und einigen Versionen) für Sie, wenn Ihr Modell auf einen Wert in der Liste initialisiert wird. –

+0

Ihr Plunker-Link ist falsch. –

Antwort

0

Seien Sie vorsichtig bei der Verwendung von Auswahl wie und verfolgen, indem sie in dem gleichen Ausdruck. AngularJS API ngOptions

Ihr Ausdruck für ng-options kann nicht funktionieren. Die Verwendung von select as und track by im selben Ausdruck wertet mem.id bis mem.id.id aus. Ändern Sie den Ausdruck in

ng-options="mem as mem.displayName for mem in groupCtrl.selectableMembers track by mem.id" 

Und wie Sie die ausgewählten Objekte einstellen, nicht richtig zu mir auch. Sie können nicht nur die ID festlegen, Sie müssen das gesamte Objekt als ausgewählt festlegen, andernfalls schlägt Ihre ng-options Ausdruck Auswertung auch fehl. Ändern Sie deshalb Ihre Auswahl auf (vorausgesetzt, die auswählbaren Daten sind in $scope.model so wie im Prompt-Beispiel gespeichert).

$scope.memSelection = [$scope.model[0], $scope.model[1]] 

Ich habe die plunk aktualisiert und es funktioniert für Einzel- und Mehrfachauswahl. Für weitere Informationen lesen Sie AngularJS API ngOptions.

+0

Danke Paul, das habe ich jetzt korrigiert. –

+0

Ich denke, es funktioniert jetzt mit Ausnahme von 1.4-Versionen, aber nur für Single-Select (aktualisierte Plunker-Link). Ich vermute, dass die Anwendung des Attributs für Multiselect nicht unterstützt wird. –