Ho creato direttiva semplice personalizzato AngularJs per questo fantastico plugin per jQuery jQuery-Select2 come segue:Angularjs personalizzato select2 direttiva
direttiva
app.directive("select2",function($timeout,$parse){
return {
restrict: 'AC',
link: function(scope, element, attrs) {
$timeout(function() {
$(element).select2();
},200);
}
};
});
uso in modelli HTML:
<select class="form-control" select2 name="country"
data-ng-model="client.primary_address.country"
ng-options="c.name as c.name for c in client.countries">
<option value="">Select Country</option>
</select>
Sta funzionando come previsto e il mio normale 012 L'elementoè sostituito dai plug-in select2
.
Tuttavia c'è un problema però, a volte sta mostrando il valore predefinito cioè Select Country
qui anche se in discesa valore del modello corretto viene automaticamente selezionato.
Ora se aumento l'intervallo da 200
ad alto valore, ad esempio 1500
, funziona ma ritarda il rendering della direttiva. Inoltre, ritengo che non sia una soluzione adeguata, dato che i miei dati vengono caricati tramite ajax.
Ho anche cercato di aggiornare la direttiva come segue, ma fortuna dal fatto che uno:
app.directive("select2",function($timeout,$parse){
return {
restrict: 'AC',
require: 'ngModel',
link: function(scope, element, attrs) {
var modelAccessor = $parse(attrs.ngModel);
$timeout(function() {
$(element).select2();
});
scope.$watch(modelAccessor, function (val) {
if(val) {
$(element).select2("val",val);
}
});
}
};
});
PS: So che c'è modulo simile presente ui-select, ma richiede una certa marcatura diversi in forma di <ui-select></ui-select>
e la mia app è già completamente sviluppata e voglio solo sostituire la normale casella di selezione con select2.
Quindi, per favore, puoi indicarmi come risolvere questo problema e assicurarmi che la direttiva sia in sincronia con il comportamento più recente?
Questo ha a che fare con 'select2'? Se rimuovi la direttiva 'select2' e la rendi un normale elemento select, funziona come previsto? –
Sì, funziona come previsto se rimuovo così. –
Sto anche usando 'select2' nella mia applicazione, ma sto usando [ui-select2] (https://github.com/angular-ui/ui-select2) che è il wrapper di Angular per questo, che ora è deprecato . Select2 mi ha causato un sacco di dolore btw, ti suggerisco di evitarlo se puoi :) –