2013-02-20 7 views
21

ich eine select2 Richtlinie mit einer benutzerdefinierten Abfrage für eine Mehrfachauswahl von Ländern habe die Daten zu greifen:Einstellung Anfangswert von Angular-UI Select2 mehr Richtlinie

// Directive 
<input ng-model="filters.countries" ui-select2="filters.countryOptions" 
    data-placeholder="Choose a country..."> 

// filters.countryOptions 
{ 
    multiple: true, 
    query: function() { 
     get_list_of_countries(); 
    } 
} 

// Formatted data from remote source 
[ 
    {id: 'US', text: 'United States'}, 
    {id: 'CA', text: 'Canada'} ... 
] 

Ich versuche, die ursprünglich ausgewählten Werte zu setzen in meinem Controller:

$scope.filters.countries = [{id: 'US', text: 'United States'}]; 

Dieses korrekt das Modell eingestellt wird, aber dies geschieht, bevor die select2 Initialisierung aufgetreten ist. Während ich den verbleibenden Initialisierungscode durchschreite, zeigt der Eingang vorübergehend [Object] an, bevor er schließlich $scope.filters.countries und die Eingabe ausblendet, aber es zeigt den Platzhaltertext nicht in der Eingabe an.

Um dies zu umgehen Ich verwende die folgenden die Modelle Anfangswert zurückgesetzt:

$scope.$on('$viewContentLoaded', function() { 
    setTimeout(function() { 
     $scope.filters.countries = [{id: 'US', text: 'United States'}]; 
    }, 100); 
}); 

Es ist wirklich hackish scheint ein setTimeout zu werden. Gibt es einen besseren Weg, den ich vermisse?

Update 1

Wie hier von ProLoser angefordert ist eine Demo und Github Ticket.

Demo: http://plnkr.co/edit/DgpGyegQxVm7zH1dZIJZ?p=preview

GitHub Ausgabe: https://github.com/angular-ui/angular-ui/issues/455

ProLoser Rat Nach ich mit select2 der initSelection Funktion gestartet:

initSelection : function (element, callback) { 
    callback($(element).data('$ngModelController').$modelValue); 
}, 

Es funktioniert der Trick aber fühlt sich immer noch wie dieses Problem zu umgehen.

+1

Können Sie eine Demo für diese erstellen und vielleicht ein Ticket öffnen? Wenn Sie 'initSelection' in select2 verwendet haben (wofür genau das gedacht ist), könnten Sie' $ scope.filters.countries = 'US'' machen, aber der gesamte Init-Code muss etwas gründlicher getestet werden sicher, dass das, was du getan hast, auch unterstützt wird. Es könnte ein Problem sein, wenn ich keine passende Referenz zum ausgewählten Objekt finde – ProLoser

+0

Ich habe meine Frage oben bearbeitet. Danke für Ihre Hilfe! – SethBoyd

+0

PLNKR funktioniert nicht einmal. Ich hasse das – iamwhitebox

Antwort

-1

Haben Sie versucht, Ihre Möglichkeiten als Initialisierung:

<option selected value="0">Name</option> 
Verwandte Themen