2016-07-10 11 views
0

Ich bin ziemlich neu in Angular so vermisse ich etwas trivial:Warum fügt Angular noch unbekannte Auswahl hinzu?

<select ng-model="shop_index"> 
    <option ng-repeat="elem in shops" 
      ng-selected="{{$first}}" 
      ng-value="{{$index}}">{{elem.name}}</option> 
</select> 

Wenn ich erstellt HTML-Code aussehen sieht es in Ordnung, außer dem unbekannten Eintrag. Ich füge ng-init="0" zum HTML-Code hinzu - keine Änderung. Ich initiiere den Modellwert im Controller (vor dem Abrufen der Daten) - keine Änderung. Ich initiiere das Modell nach dem Abrufen der Daten - keine Änderung. Diese unbekannte Option ist einfach geschweißt :-).

ich frage nicht, wie man es loswerden (wie es manuell hinzufügen, aber versteckt), aber, wie das obige Code zu beheben es automatisch zu entfernen.

+0

Try 'shop_index' zu initiieren. –

+1

Es liegt daran, dass Sie nicht 'ngOptions' verwenden, nichts mit 'shop_index'. –

+0

@IsmailRBOUH, wie ich geschrieben habe ich bereits versucht, in drei auf einmal platziert, sehe ich keinen anderen Ort, wo ich init dafür setzen kann. – greenoldman

Antwort

1

Sie sollten diese verwenden:

In Ihrem Controller:

$scope.shop_index = $scope.shops[0]; 

In Ihrem Ansicht:

<select ng-model="shop_index" ng-options="elem as elem.name for elem in shops"></select> 
+0

Vielen Dank !!! :-) – greenoldman

+0

Froh zu helfen :) – developer033

1

Sie müssen ngOptions mit select verwenden, sonst werden die Werte nicht korrekt mit der select verknüpft, bis Sie einen Wert auswählen. Der Grund dafür entgeht mir im Moment, aber die Grundidee ist, dass die übergebenen Werte eher einem Array-Index als den Werten entsprechen, an die Sie gewöhnt sind.

Der Wert des Eingangselementes als Ergebnis sollten Sie belanglos sein.

Die ngOptions Richtlinie in Form von value as label for object in collection sein sollte.

Wenn die Werte im HTML undefined sind, liegt das daran, dass der obige Ausdruck falsch ist - stellen Sie sicher, dass value auf einen gültigen Wert zeigt.

+0

Nachdem ich @developer033 Code verwendet habe, habe ich auch das Tracking von "elem.id" überprüft - so dass es im Falle von Arrays erscheint, dass man kein Tracking by Index Array verwenden kann, muss es ** in ** Daten (oder den Daten) liegen selbst - wie ganzes Element). – greenoldman

+0

Sie können definitiv nach Index in einem Array verfolgen, aber das ist sehr wahrscheinlich * nicht * was Sie wollen, weil die Wertoption in 'ngOptions' ist, was' ngModel' festgelegt ist. Sehr wahrscheinlich möchten Sie nicht, dass Ihr Modellwert ein Index eines Arrays ist. –

Verwandte Themen