2015-11-30 14 views
10

ich als eine Dropdown-Liste mit Standardwert in AngularJS gesetzt,Wie Standardwert in ng-Optionen setzen

<select name="repeatSelect" id="repeatSelect" ng-model="repeatSelect" ng-init=" repeatSelect = data[0].id"> 
    <option ng-repeat="option in data" value="{{option.id}}">{{option.name}}</option> 
</select> 

Wie kann ich die gleich erreichen ng-options mit? Ich treid mit,

<select name="repeatSelect" 
    id="repeatSelect" 
    ng-model="repeatSelect" 
    ng-init=" repeatSelect = option.id" 
    ng-options="option.name for option in data track by option.id"> 
</select> 

Aber keine Verwendung. Beispiel fiddle is here

Antwort

14

Verwenden Sie ng-init, um den Standardwert für ng-options festzulegen.

ist die: demo

<select name="repeatSelect" 
    id="repeatSelect" 
    ng-model="repeatSelect" 
    ng-init=" repeatSelect = data[0].id" 
    ng-options="option.id as option.name for option in data">   
</select> 
+1

Yup ... Danke ... – mpsbhat

+0

funktioniert nicht in meinem Code –

1

i acheieved haben, was Sie Ihren Code benötigen verwenden und ng-options wie Sie, hier erwähnt ist Working Fiddle

Voll CODE

<div ng-app="ngrepeatSelect"> 
    <div ng-controller="ExampleController"> 
     <form name="myForm"> 
      <label for="repeatSelect">Angular select:</label> 
      <select name="repeatSelect" 
    id="repeatSelect" 
    ng-model="repeatSelect" 
    ng-init=" repeatSelect = data[0]" 
    ng-options="option.name for option in data track by option.id"> 
</select> 
     </form> 
     <br/> <tt>Selected value: {{repeatSelect.id}}</tt> 

    </div> 
</div> 
<br/> 
+0

Dies ist davon ausgegangen, dass Ihr erstes Element ist "- Select -". Was, wenn Sie diese Option nicht haben? Sollte ich es manuell hinzufügen? – gerl

7

Alle dies vermisse die Verwendung von ng-init.

Aus den Winkel docs:

Diese Direktive kann unnötige Mengen an Logik missbraucht werden, um in Ihre Vorlagen hinzufügen. Es gibt nur wenige geeignete Verwendungen von ngInit, wie Aliasing besonderen Eigenschaften von ngRepeat, wie unten in der Demo gesehen; und zum Injizieren von Daten über serverseitiges Scripting. Neben diesen wenigen Fällen sollten Sie Controller anstelle von ngInit verwenden, um Werte für einen Bereich zu initialisieren.

Source docs

Meiner Meinung nach der richtige Weg, einen Standardwert festgelegt ist Ihr ng-model Eigenschaft mit dem von Ihrem ng-options gewählten Wert einfach Vorfülle, eckig erledigt den Rest.

Im Wesentlichen, wenn Sie die $scope Eigenschaft definieren, wird Ihre Auswahl gebunden, um ihr den Standardwert von Ihrem data Array zuzuweisen. Wenn Ihr data Array von einer Ajax-Anforderung ist, weisen Sie nur, wenn Sie die data haben.

.controller('test', ['$scope', function ($scope) { 
    $scope.data = [{name: 'one', id: 1}, {name: 'two', id: 2},{name: 'three', id: 3}]; 
    $scope.repeatSelect= $scope.data[0]; 
}]); 

Es gibt eine Einschränkung zu beachten. Wenn Sie das as Schlüsselwort in Ihrem Ausdruck verwenden müssen Sie Ihre ng-model mit der tatsächlichen Eigenschaft zuweisen Ihr es sagen zu wählen.

ansehen Geige Demonstrieren beide: http://jsfiddle.net/kb99gee8/

+0

Möchten Sie den Downvote erklären? – ste2425

+0

Das würde ich auch gerne wissen, da ich es so mache. +1 – klskl

+1

@klskl Ich denke, es war einfach jemand, der es nicht mag, wegen falscher Verwendung von 'nginit' gerufen zu werden. Ich kann mir keinen anderen Grund vorstellen, sogar die Dokumente sagen, dass es nur für ein paar Anwendungsfälle verwendet werden sollte, die dies nicht beinhalten. – ste2425

0

Ich werde ein Beispiel HTML-Teil vorschlagen

<select class="form-control" ng-model="data.selectedOption" required ng-options="option.name as option.name for option in venueNamelists" ng-change="getmediationRooms(data.selectedOption)"></select> 

In meinem Controller

$ scope.data = {selectedOption: $ scope.venueNamelists [ i] .name};

der Modellwert sollte in den venueNamelists auf den Schlüssel, Wert-Paar entsprechen.