Jestem nowy w AngularJS. Szukałem dużo, ale to nie rozwiązuje mojego problemu.
Po raz pierwszy otrzymuję pustą opcję w polu wyboru.
Oto mój kod HTML
<div ng-app="MyApp1">
<div ng-controller="MyController">
<input type="text" ng-model="feed.name" placeholder="Name" />
<select ng-model="feed.config">
<option ng-repeat="template in configs">{{template.name}}</option>
</select>
</div>
</div>
JS
var MyApp=angular.module('MyApp1',[])
MyApp.controller('MyController', function($scope) {
$scope.feed = {};
//Configuration
$scope.configs = [
{'name': 'Config 1',
'value': 'config1'},
{'name': 'Config 2',
'value': 'config2'},
{'name': 'Config 3',
'value': 'config3'}
];
//Setting first option as selected in configuration select
$scope.feed.config = $scope.configs[0].value;
});
Ale to nie działa. Jak mogę to rozwiązać? Oto demo JSFiddle
źródło
configs
z$scope
do jest$scope.feed
konieczne?Chociaż wszystkie powyższe sugestie działają, czasami potrzebuję pustego zaznaczenia (pokazującego tekst zastępczy), gdy po raz pierwszy wchodzę na mój ekran. Tak więc, aby zapobiec dodaniu tego pustego zaznaczenia na początku (lub czasami na końcu) mojej listy, używam tej sztuczki:
Kod HTML
<div ng-app="MyApp1"> <div ng-controller="MyController"> <input type="text" ng-model="feed.name" placeholder="Name" /> <select ng-model="feed.config" ng-options="template.value as template.name for template in feed.configs" placeholder="Config"> <option value="" selected hidden /> </select> </div> </div>
Teraz zdefiniowałeś tę pustą opcję, więc pole wyboru jest szczęśliwe, ale pozostawiasz je ukryte.
źródło
Oto zaktualizowane skrzypce: http://jsfiddle.net/UKySp/
Trzeba było ustawić początkową wartość modelu na rzeczywisty obiekt:
$scope.feed.config = $scope.configs[0];
I zaktualizuj swój wybór, aby wyglądał tak:
<select ng-model="feed.config" ng-options="item.name for item in configs">
źródło
Inną metodą rozwiązania jest użycie:
$first
inng-repeat
Stosowanie:
<select ng-model="feed.config"> <option ng-repeat="template in configs" ng-selected="$first">{{template.name}}</option> </select>
Piśmiennictwo :
ngSelected : https://docs.angularjs.org/api/ng/directive/ngSelected
$ first : https://docs.angularjs.org/api/ng/directive/ngRepeat
Twoje zdrowie
źródło
Istnieje wiele sposobów, takich jak -
<select ng-init="feed.config = options[0]" ng-model="feed.config" ng-options="template.value as template.name for template in feed.configs"> </select>
Lub
$scope.feed.config = $scope.configs[0].name;
źródło
Jest to rodzaj obejścia, ale działa jak urok. Po prostu dodaj
<option value="" style="display: none"></option>
jako wypełniacz. Jak w:<select size="4" ng-model="feed.config" ng-options="template.value as template.name for template in feed.configs"> <option value="" style="display: none"></option> </select>
źródło
Jeśli chcesz tylko usunąć puste miejsce, użyj ng-show i gotowe! Nie ma potrzeby inicjowania wartości w JS.
<select ng-model="SelectedStatus" ng-options="x.caption for x in statusList"> <option value="" ng-show="false"></option> </select>`
źródło
Zmień swój kod w ten sposób. Zapominasz o wartości wewnątrz opcji. Zanim przypiszesz ng-model. Musi mieć jakąś wartość. Tylko wtedy nie otrzymuje niezdefiniowanej wartości.
<div ng-app="MyApp1"> <div ng-controller="MyController"> <input type="text" ng-model="feed.name" placeholder="Name" /> <select ng-model="feed"> <option ng-repeat="template in configs" value="template.value">{{template.name}} </option> </select> </div> </div>
JS
var MyApp=angular.module('MyApp1',[]) MyApp.controller('MyController',function($scope) { $scope.feed = 'config1'; $scope.configs = [ {'name': 'Config 1', 'value': 'config1'}, {'name': 'Config 2', 'value': 'config2'}, {'name': 'Config 3', 'value': 'config3'} ]; });
źródło
Użyj wartości ng zamiast wartości .
$scope.allRecs = [{"text":"hello"},{"text":"bye"}]; $scope.X = 0;
a następnie w pliku html powinno wyglądać następująco:
<select ng-model="X"> <option ng-repeat="oneRec in allRecs track by $index" ng-value="$index">{{oneRec.text}}</option> </select>
źródło
Dla mnie odpowiedzią na to pytanie było użycie
<option value="" selected hidden />
tak jak to zaproponował @RedSparkle plus dodanieng-if="false"
do pracy w IE.Więc moja pełna opcja to (ma różnice w stosunku do tego, co napisałem wcześniej, ale to nie ma znaczenia z powodu ng-if):
<option value="" ng-if="false" disabled hidden></option>
źródło
Wreszcie zadziałało.
<select ng-init="mybasketModel = basket[0]" ng-model="mybasketModel"> <option ng-repeat="item in basket" ng-selected="$first">{{item}}</option> </select>
źródło
Sprawdź również, czy masz jakąś fałszywą wartość, czy nie. Angularjs wstawi pustą opcję, jeśli masz fałszywą wartość. Walczyłem przez 2 dni tylko z powodu fałszywej wartości. Mam nadzieję, że komuś to pomoże.
Miałem opcje [0, 1] i początkowo ustawiłem model na 0, dlatego wstawiono pustą opcję. Obejściem tego problemu było [„0”, „1”].
źródło