Stworzyłem dyrektywę prostego zwyczaj angularjs dla tej wspaniałej jquery plugin jQuery-Select2 następująco:angularjs klienta select2 dyrektywa
dyrektywa
app.directive("select2",function($timeout,$parse){
return {
restrict: 'AC',
link: function(scope, element, attrs) {
$timeout(function() {
$(element).select2();
},200);
}
};
});
Wykorzystanie szablonów 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>
Działa zgodnie z oczekiwaniami, a mój normalny select
element zostanie zastąpiony przez wtyczki select2
.
Jednak istnieje jedna kwestia, czasami pokazuje ona wartość domyślną, np. Select Country
tutaj, chociaż w menu rozwijanym wybrana jest właściwa wartość modelu.
Teraz, jeśli zwiększam przedział $timeout
z 200
na jakąś dużą wartość, powiedzmy 1500
, to działa, ale opóźnia renderowanie dyrektywy. Też myślę, że to nie jest właściwe rozwiązanie dla tego, ponieważ moje dane są ładowane przez ajax.
Próbowałem również zaktualizować dyrektywę w następujący sposób, ale nie ma szczęścia w tym zarówno:
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: Wiem, że nie jest podobny moduł obecny ui-select, ale wymaga trochę innego znaczników w postaci <ui-select></ui-select>
, a moja aplikacja jest już w pełni rozwinięta i chcę tylko zastąpić zwykłe pole wyboru select2.
Czy możesz mi doradzić, w jaki sposób mogę rozwiązać ten problem i upewnić się, że dyrektywa jest zsynchronizowana z najnowszymi zachowaniami?
Czy to ma coś wspólnego z 'select2'? Jeśli usuniesz dyrektywę 'select2' i sprawisz, że będzie ona normalnym elementem, czy działa zgodnie z oczekiwaniami? –
Tak, działa zgodnie z oczekiwaniami, jeśli usunę. –
Używam również 'select2' w mojej aplikacji, ale używam [ui-select2] (https://github.com/angular-ui/ui-select2), który jest dla niego opakowaniem Angular, który jest teraz przestarzały . Select2 przysporzył mi wiele smutku, sugeruję, żebyś go unikał, jeśli możesz :) –