2013-02-20 12 views
21

ho una direttiva select2 per un multiplo selezionato di paesi con una query personalizzata per afferrare i dati:Impostazione dei valori iniziali della direttiva Angular-UI Select2 multipla

// 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'} ... 
] 

sto cercando di impostare i valori inizialmente selezionati nel mio controller utilizzando:

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

Ciò impostato correttamente il modello, tuttavia questo sta accadendo prima che si è verificato l'inizializzazione select2. Mentre passo attraverso il codice di inizializzazione rimanente, l'input visualizza temporaneamente [Object] prima di eliminare definitivamente $scope.filters.countries e l'input, ma non visualizza il testo segnaposto nell'input.

Per ovviare a questo sto usando il seguente per ripristinare il valore iniziale dei modelli:

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

Sembra davvero di essere hacker utilizzando un setTimeout. C'è un modo migliore che mi manca?

Update 1

Come richiesto dal ProLoser ecco un demo e biglietto GitHub.

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

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

Seguendo il consiglio di ProLoser ho iniziato ad usare la funzione di initSelection select2:

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

Si fa il trucco, ma ancora si sente come una soluzione.

+1

Potete creare una demo per questo e forse aprire un ticket? Se hai usato 'initSelection' in select2 (che è specificamente per che cosa è progettato per) potresti fare' $ scope.filters.countries = 'US'' ma l'intero codice di init ha bisogno di alcuni test più approfonditi quindi dovremmo essere certo che anche quello che hai fatto è supportato. Potrebbe essere un problema non trovare un riferimento corrispondente all'oggetto selezionato – ProLoser

+0

Ho modificato la mia domanda sopra. Grazie per l'aiuto! – SethBoyd

+0

plnkr non funziona nemmeno. odio quello – iamwhitebox

risposta

-1

Hai provato inizializzazione le opzioni come:

<option selected value="0">Name</option> 
Problemi correlati