2013-04-20 5 views
8

Ich habe versucht, meine eckige ui select2-Direktive zu initialisieren und konnte es nicht mit Optionsgruppen arbeiten.Wie werden Select2-Tags korrekt mit Angular UI initialisiert, wenn Optionsgruppen verwendet werden?

Der Code:

function testCtrl1($scope) 
{ 
    $scope.selectedOptions = ['1']; 
    $scope.categories = [ 
      {label: 'cat1', options: [{desc: 'one', value: 1}]}, 
      {label: 'cat2', options: [{desc: 'two', value: 2}]} 
    ]; 
} 

Die HTML:

<select multiple ui-select2 ng-model="selectedOptions" style="width: 300px"> 
    <optgroup ng-repeat="category in categories" label="{{category.label}}"> 
     <option ng-repeat="option in category.options" value="{{option.value}}">{{option.desc}} - {{option.value}}</option> 
    </optgroup> 
</select> 

Die Fiddle: Ich habe die folgende jsfiddle.

Während ich dies tue merke ich, dass es richtig initialisiert würde, wenn ich eine zweite select2-Direktive, die die Option Gruppen (seltsam) nicht enthalten würde. Ich bemerke ein anderes merkwürdiges Verhalten, wenn ich das zweite select2 einschließe, aber ich bin nicht allzu besorgt darüber, da mein Ziel nur ist, testCtrl1 zum Laufen zu bringen.

+0

'ui-select2' nicht gründlich mit' ' getestet.Versuchen Sie, ein Ticket auf [angular-ui/ui-select] (https://github.com/angular-ui/ui-select2) zu öffnen (falls noch nicht vorhanden) oder versuchen Sie uns, dieses Problem anzugehen. – ProLoser

+0

Ich habe es hier getan: https://github.com/angular-ui/angular-ui/issues/545 aber es sieht so aus, als ob es in ein anderes Modul getrennt wurde, also habe ich es hier eingefügt: https://github.com/ angular-ui/ui-select2/issues/8 – testing123

Antwort

4

Herunterladen neuesten Winkel-ui select2 und Update-Linie 24:

repeatOption = tElm.find('optgroup[ng-repeat], optgroup[data-ng-repeat], option[ng-repeat], option[data-ng-repeat]'); 

Jetzt unterstützt es Optionsgruppen.

1

select2 unterstützt <optgroup> durch hierarchische Daten, können Sie stattdessen ng-repeat die Verwendung ein strukturiertes Objekt als Daten-Pass-Through finden
http://ivaynberg.github.io/select2/#data_array
Auch für die "Beispiel Hierarchical Data" in der Seite.

JS:

$scope.model = { 
    data: [ 
     // both 'id' and 'text' are needed unless you write custom functions 
     { text: 'cat1', children: [{id: 1, text: 'one'}] }, 
     { text: 'cat2', children: [{id: 2, text: 'two'}] } 
    ] 
]; 

HTML:

<input type="hidden" multiple ui-select2="model" 
    ng-model="selectedOptions" style="width: 300px"> 

selectedOptions wird ein Array von Objekte sein: [ {id: 1, text: 'one'} ].

Für Passthrough über die Richtlinie finden Sie Angular UI-Demo:
http://plnkr.co/edit/gist:4279651?p=preview

EDIT: Update-Code und den Verweis auf Website

+0

Ich habe gerade diese Option versucht: http://jsfiddle.net/tadchristiansen/X3pSb/ und die Eingabe wird auch nicht initialisiert. Die ausgewählte Option befindet sich nicht in der Dropdown-Liste (die ordnungsgemäß funktioniert), wird jedoch weiterhin nicht in der Tag-Eingabe angezeigt. Gedanken? – testing123

+0

Ich habe versucht, 'selectedOptions' als Objekt zu setzen, aber ohne Erfolg. Wenn ich mich frage, ob es ein Fehler im Objektvergleichscode ist, habe ich 'select2' auch auf 3.3.2 aktualisiert, aber ohne Erfolg. Die 'ui-select2' Direktive hat' select2 ("data") 'von dem was ich sehe aufgerufen (http://ivaynberg.github.io/select2/#programmatic). Ich denke, der nächste Schritt ist Debugger/Logging. Meine Geige: http://jsfiddle.net/Jhfan/3/ – leesei

4

Nun, ich bin auf das gleiche Hindernis gekommen und möchte meine Lösung teilen. Select2 beobachtete das optgroup ng-repeat-Attribut nicht. Sie müssen dies zu Ihrer eckigen ui select2-Direktive hinzufügen. diese

Wechsel:

repeatOption = tElm.find('option[ng-repeat], option[data-ng-repeat]'); 

Um das:

repeatOption = tElm.find('optgroup[ng-repeat], optgroup[data-ng-repeat], option[ng-repeat], option[data-ng-repeat]'); 

Nicht sicher, ob dies eine saubere Lösung ist, aber es funktioniert für mich.

Github issue