Staram się, aby pole wyboru zaczęło się od wstępnie wypełnionej opcji przy użyciu ng-repeat z AngularJS 1.1.5. Zamiast tego wybór zawsze zaczyna się od niczego nie zaznaczonego. Ma również pustą opcję, której nie chcę. Myślę, że jest efekt uboczny braku wyboru.
Mogę to uruchomić, używając opcji ng-options zamiast ng-repeat, ale w tym przypadku chcę użyć ng-repeat. Chociaż mój zawężony przykład tego nie pokazuje, chcę również ustawić atrybut tytułu każdej opcji i nie ma sposobu, aby to zrobić za pomocą ng-options, o ile wiem.
Nie sądzę, że jest to związane z powszechnym problemem dziedziczenia zakresu / prototypów w AngularJs. Przynajmniej nie widzę niczego oczywistego podczas inspekcji w Batarangu. Ponadto po wybraniu opcji w menu wyboru za pomocą interfejsu użytkownika model aktualizuje się poprawnie.
Oto kod HTML:
<body ng-app ng-controller="AppCtrl">
<div>
Operator is: {{filterCondition.operator}}
</div>
<select ng-model="filterCondition.operator">
<option
ng-repeat="operator in operators"
value="{{operator.value}}"
>
{{operator.displayName}}
</option>
</select>
</body>
Oraz JavaScript:
function AppCtrl($scope) {
$scope.filterCondition={
operator: 'eq'
}
$scope.operators = [
{value: 'eq', displayName: 'equals'},
{value: 'neq', displayName: 'not equal'}
]
}
JS Fiddle do tego: http://jsfiddle.net/coverbeck/FxM3B/2/
źródło
Odpowiedzi:
DOBRZE. Jeśli nie chcesz używać poprawnego sposobu
ng-options
, możesz dodaćng-selected
atrybut z logiką sprawdzania warunków dlaoption
dyrektywy, aby wybór wstępny działał.Working Demo
źródło
W przypadku tagu select, angular udostępnia dyrektywę ng-options. Daje ci konkretną strukturę do konfigurowania opcji i ustawiania wartości domyślnych. Oto zaktualizowane skrzypce używające opcji ng, które działają zgodnie z oczekiwaniami: http://jsfiddle.net/FxM3B/4/
Zaktualizowany HTML (kod pozostaje ten sam)
źródło
Podziękowania dla TheSharpieOne za wskazanie opcji wybranej przez ng. Gdyby to zostało opublikowane jako odpowiedź, a nie jako komentarz, zrobiłbym to poprawną odpowiedź.
Oto działający JSFiddle: http://jsfiddle.net/coverbeck/FxM3B/5/ .
Zaktualizowałem również skrzypce, aby używały atrybutu tytułu, który pominąłem w moim oryginalnym poście, ponieważ to nie było przyczyną problemu (ale jest to powód, dla którego chcę użyć ng-repeat zamiast ng-options) .
HTML:
JS:
źródło
Fakt, że angular wstrzykuje pusty element opcji do elementu select, polega na tym, że obiekt modelu powiązany z nim domyślnie ma pustą wartość w po zainicjowaniu.
Jeśli chcesz wybrać opcję domyślną, prawdopodobnie możesz ustawić ją w zakresie w kontrolerze
Jeśli chcesz mieć pusty symbol zastępczy opcji, działa to dla mnie
źródło
Zgodnie z sugestią, musisz użyć opcji ng-options i niestety uważam, że musisz odwołać się do elementu tablicy jako domyślnego (chyba że tablica jest tablicą ciągów).
http://jsfiddle.net/FxM3B/3/
JavaScript:
HTML:
źródło
Jeśli używasz opcji md-select i ng-powtarzania md z materiału kątowego, możesz dodać
ng-model-options="{trackBy: '$value.id'}"
do tagu md-select popiół pokazany na tym piórzeKod:
źródło