Pracuję z AngularJS przez ostatnie kilka tygodni i jedyne, co mnie naprawdę niepokoi, to to, że nawet po wypróbowaniu wszystkich permutacji lub konfiguracji określonej w specyfikacji na stronie http://docs.angularjs.org/api/ng .directive: select , wciąż dostaję pustą opcję jako pierwsze dziecko elementu select.
Oto Jadeit:
select.span9(ng-model='form.type', required, ng-options='option.value as option.name for option in typeOptions');
Tutaj kontroler:
$scope.typeOptions = [
{ name: 'Feature', value: 'feature' },
{ name: 'Bug', value: 'bug' },
{ name: 'Enhancement', value: 'enhancement' }
];
Na koniec generowany jest kod HTML:
<select ng-model="form.type" required="required" ng-options="option.value as option.name for option in typeOptions" class="span9 ng-pristine ng-invalid ng-invalid-required">
<option value="?" selected="selected"></option>
<option value="0">Feature</option>
<option value="1">Bug</option>
<option value="2">Enhancement</option>
</select>
Co muszę zrobić, aby się go pozbyć?
PS: Bez tego wszystko działa, ale wygląda dziwnie, jeśli używasz select2 bez wielokrotnego wyboru.
null
jest jedną z twoich wartości.<option>
więc wygenerowano kątowo tat - coś takiego<option value="?">Select an option</option>
<option value="">Select an option</option>
thats null-Value z list opcji. Nie potrzeba znaku?Jeśli chcesz uzyskać wartość początkową, zobacz odpowiedź @ pkozlowski.opensource, którą informacje FYI można również zaimplementować w widoku (a nie w kontrolerze) za pomocą ng-init:
Jeśli nie chcesz wartości początkowej, „pojedynczy element zakodowany na stałe, z wartością ustawioną na pusty ciąg znaków, może być zagnieżdżony w elemencie. Ten element będzie wówczas reprezentował opcję zerową lub opcję„ nie wybrano ”:
źródło
Kątowy <1,4
Dla każdego, kto traktuje „null” jako prawidłową wartość jednej z opcji (wyobraź sobie, że „null” jest wartością jednego z elementów w typeOptions w poniższym przykładzie), znalazłem ten najprostszy sposób, aby upewnić się, że automatycznie dodaje się opcja jest ukryta to użyć ng-if.
Dlaczego ng-if, a nie ng-hide? Ponieważ chcesz, aby selektory css były kierowane na pierwszą opcję powyżej, wybierz opcję „rzeczywistą”, a nie tę ukrytą. Przydaje się, gdy używasz kątomierza do testowania e2e i (z jakiegokolwiek powodu) używasz by.css (), aby celować w wybrane opcje.
Kątowe> = 1,4
Ze względu na refaktoryzację dyrektyw select i options używanie
ng-if
nie jest już realną opcją, więc musisz się zwrócić, abyng-show="false"
znów działać.źródło
size="5"
atrybuty selekcji i widzisz, że nic nie zostało wybrane! Jak w domyślnym<select>
elemencie! Nie rozumiem, dlaczego angular robi takie rzeczy dla selekcji bezmultiple
atrybutu ...Może przydatne dla kogoś:
Jeśli chcesz użyć zwykłych opcji zamiast opcji ng, możesz zrobić to tak:
Ustaw model w linii. Użyj ng-init, aby pozbyć się pustej opcji
źródło
Przydarzyło mi się coś podobnego i było spowodowane aktualizacją do wersji kątowej 1.5.
ng-init
wygląda na to, że jest analizowany pod kątem typu w nowszych wersjach Angulara. W starszych Angularng-init="myModelName=600"
odwzorowałby na opcję o wartości „600”, tj.<option value="600">First</option>
Ale w Angular 1.5 nie znalazłby tego, ponieważ wydaje się, że spodziewa się znaleźć opcję o wartości 600 tj<option value=600>First</option>
. Angular wstawiłby następnie losowy pierwszy element:Kątowy <1.2.x
Kątowe> 1,2
źródło
ng-value="600"
woption
zamiastvalue
. Przetwarza to na liczbę i nie musisz konwertować swoich wartości tak jak teraz :)Wśród mnóstwa odpowiedzi tutaj, pomyślałem, że opublikuję rozwiązanie, które dla mnie zadziałało i spełniło wszystkie następujące warunki:
value=""
)kod
src
oryginalne pytania i odpowiedzi - https://stackoverflow.com/a/32880941/1121919
źródło
<option ng-selected="true" value="null">
?Szybkie rozwiązanie:
Mam nadzieję, że to komuś pomoże. Idealnie, wybraną odpowiedzią powinno być podejście, ale jeśli to nie jest możliwe, powinno działać jako łatka.
źródło
Tak ng-model utworzy pustą wartość opcji, gdy właściwość ng-model będzie niezdefiniowana. Możemy tego uniknąć, przypisując obiekt do modelu ng
Przykład
kodowanie kątowe
Ważna uwaga:
Przypisz obiekt tablicy, taki jak $ scope.collections [0] lub $ scope.collections [1] do ng-model, nie używaj właściwości obiektu. jeśli otrzymujesz wartość opcji z serwera, używając funkcji oddzwaniania, przypisz obiekt do modelu ng
UWAGA z dokumentu kątowego
Uwaga: ngModel porównuje przez odniesienie, a nie wartość. Jest to ważne przy wiązaniu z tablicą obiektów. patrz przykład http://jsfiddle.net/qWzTb/
próbowałem wiele razy, w końcu to znalazłem.
źródło
Chociaż odpowiedzi zarówno @ pkozlowski.opensource, jak i @ Mark są poprawne, chciałbym udostępnić moją nieco zmodyfikowaną wersję, w której zawsze wybieram pierwszy element na liście, niezależnie od jego wartości:
źródło
Korzystam z Angulara 1.4x i znalazłem ten przykład, więc użyłem ng-init, aby ustawić wartość początkową w select:
źródło
Napotkałem ten sam problem. Jeśli publikujesz formularz kątowy z normalnym postem, napotkasz ten problem, ponieważ kątowy nie pozwala na ustawienie wartości opcji w sposób, w jaki użyłeś. Jeśli otrzymasz wartość „form.type”, znajdziesz odpowiednią wartość. Musisz zaksięgować obiekt kątowy, który nie jest formalnym słupkiem.
źródło
Prostym rozwiązaniem jest ustawienie opcji z pustą wartością.
""
Znalazłem, że eliminuje to dodatkową niezdefiniowaną opcję.źródło
Ok, właściwie odpowiedź jest bardzo prosta: gdy istnieje opcja nie rozpoznana przez Angulara, obejmuje ona nudną. To, co robisz źle, to to, że kiedy używasz opcji ng, to czyta obiekt, powiedzmy
[{ id: 10, name: test }, { id: 11, name: test2 }] right?
To właśnie musi być wartość twojego modelu, aby ocenić ją jako równą, powiedz, że chcesz, aby wybrana wartość wynosiła 10, musisz ustawić swój model na wartość podobną
{ id: 10, name: test }
do wybrania 10, dlatego NIE utworzy tego kosza.Mam nadzieję, że to pomaga wszystkim zrozumieć, miałem trudny czas próbując :)
źródło
To rozwiązanie działa dla mnie:
źródło
To zadziałało dla mnie
źródło
Działa to doskonale
działa to tak, że daje to pierwszą opcję do wyświetlenia przed wybraniem czegoś i
display:none
usuwa to z listy rozwijanej, więc jeśli chcesz, możesz to zrobića to da ci
select and option
przed wyborem, ale po wybraniu zniknie i nie pojawi się w menu rozwijanym.źródło
Wypróbuj ten w swoim kontrolerze, w tej samej kolejności:
źródło
Oto poprawka:
dla przykładowych danych, takich jak:
Wybierz opcję powinna wyglądać tak: -
Chodzi o to, że kiedy piszemy
value.listCount
jakovalue.listName
, automatycznie wypełnia tekst,value.listName
ale wartość wybranej opcji tovalue.listCount
chociaż wartości moje pokazują normalne 0,1,2 .. i tak dalej !!!W moim przypadku
financeRef.financeLimit
faktycznie chwytamvalue.listCount
i mogę dynamicznie manipulować w kontrolerze.źródło
Chciałbym dodać, że jeśli wartość początkowa pochodzi z powiązania z jakiegoś elementu nadrzędnego lub komponentu 1.5, upewnij się, że przekazano odpowiedni typ. Jeśli używasz
@
w powiązaniu, przekazywana zmienna będzie ciągiem znaków, a jeśli opcjami są np. liczby całkowite, pojawi się pusta opcja.Albo poprawnie parsuj wartość w init, albo powiązaj zi
<
nie@
(mniej zalecane dla wydajności, jeśli nie jest to konieczne).źródło
Proste rozwiązanie
źródło
Grind rozwiązanie z jQuery, gdy nie masz kontroli nad opcjami
HTML:
js:
źródło
Jeśli używasz ng-init swojego modelu do rozwiązania tego problemu:
źródło
miałem ten sam problem, ja (usunąłem „ng-model”) zmieniłem to:
do tego:
teraz działa, ale w moim przypadku było to spowodowane tym, że usunąłem ten zakres z ng.controller, sprawdź, czy nie zrobiłeś tego samego.
źródło
Cześć, miałem jakieś referencje mobilne jQUery i usunąłem je. W przypadku jQuery mobile żadna z powyższych poprawek nie działała dla mnie. (Świetnie, jeśli ktoś może wyjaśnić konflikt między jQuery Mobile i Angular JS)
https://guntucomputerhacks.blogspot.com.au/2017/10/angular-js-drop-down-first-options-vs.html
źródło
Jedyną rzeczą, pracował dla mnie jest użycie
track by
wng-options
następujący sposób:źródło
ng-option
dostać ostatnią wartość tablicy, która chcę ustalonej wartościoption
zselect
. Nie udało się rozwiązać :(Zobacz przykład z dokumentacji angularjs, jak przezwyciężyć te problemy.
Mi to pasuje. Można również zobaczyć, jak to działa tutaj
źródło
Możemy użyć CSS, aby ukryć pierwszą opcję, ale to nie zadziała w IE 10, 11. Najlepszym sposobem jest usunięcie elementu za pomocą Jquery. To rozwiązanie działa w przypadku głównych przeglądarek testowanych w Chrome i IE10, 11
Również jeśli używasz kątowego, czasami używa setTimeout
źródło