2013-04-30 19 views
5

Ich habe angularjs in einem Projekt verwendet. Hier habe ich eine Aufgabe. Ich habe die unten HTMLAngularjs Option auswählen Ausgewählt Standard

<div> 
<label for="lastname">Bank Name :</label> 
<select ui-select2 ng-model="bank.id"> 
    <option></option> 
    <option ng-repeat="bank in banks" value="{{bank.id}}">{{bank.text}}</option> 
</select> 
</div> 

ich iterieren alle Banken auf die Dropdown-Liste. Benutzer wählt und drückt SAVE. Ich habe die ID korrekt und speichern sie in der DB. Wenn der Benutzer zurückkommt, konnte ich den Wert des Drop-Downs nicht auf den Wert setzen, den er ausgewählt hat. Ich tue dies in den controller.js

$http.get('/AdServerLongTail/api/user'). 
success(function(data, status, headers, config) { 
    if(status == 200){ 
     $scope.id = (data["id"]);// user id     
     $scope.bank.id = (data["bankId"]);     
    } 
}). 
error(function(data, status, headers, config) { 
    alert("fail"); 
}); 

Wie kann ich es BankID 11 letssay gesetzt, die XX Bank ist?

Antwort

15

Sie sollten auf diese Weise NICHT ng-repeat verwenden. Bitte schaue auf ngOptions http://docs.angularjs.org/api/ng.directive:select

+2

Warum? ui-select2 funktioniert nicht mit ng-Optionen. – shapeshifter

+0

Ich höre dich. Aber, nur weil eine externe Bibliothek es nicht unterstützt, bedeutet es nicht, dass es richtig ist. – Lander

+4

@Lander, ich stimme zu, es ist nicht korrekt, aber leider ist es die einzige Möglichkeit, select2 zu verwenden. Sie können etwas anderes finden oder es so halten. Ich würde vorschlagen, eine bessere Direktive für den Zugriff auf s2 zu schreiben, da die Idee hinter Direktiven eine API bereitstellt, ohne die Art und Weise offen zu legen, wie sie intern funktioniert. In der idealen Welt sollte die Direktiven-API mit ng-select funktionieren. Die Verwendung von ng-repeat wird nichts kaputt machen, und ich würde es nicht als Hack betrachten. Was mich mehr stört ist, dass die select2 schrecklich angular sein kann. –

2

Ich fand es, so einfach, wie ich das verpasst habe. Hier ist der richtige Code.

<div> 
<label for="lastname">Bank Name :</label> 
<select ui-select2 ng-model="bank"> 
    <option></option> 
    <option ng-repeat="bank in banks" value="{{bank.id}}">{{bank.text}}</option> 
</select> 
</div> 

$http.get('/AdServerLongTail/api/user'). 
success(function(data, status, headers, config) { 
    if(status == 200){ 
     $scope.id = (data["id"]);// user id     
     $scope.bank = (data["bankId"]);     
    } 
}). 
error(function(data, status, headers, config) { 
    alert("fail"); 
}); 
+0

Gibt es eine Möglichkeit, dies ohne Angular UI zu tun? Ich arbeite auch daran. – elliottregan

+0

Die Verwendung von wiederholten geschachtelten Optionen verursacht Probleme und funktioniert nicht richtig mit regulärer Winkelbindung. Ich brauchte ein wenig um herauszufinden, warum diese Technik andere Angular db zum Scheitern brachte ... – taudep

+0

Bitte markieren Sie die andere Antwort als korrekt. – uriDium

8

Ich bin neu zu eckig und kämpfte dafür ein bisschen. Hier ist die einfache Tag, der das tut, und es wird ng-Auswahl:

<option ng-repeat="bank in banks" value="{{bank.id}}" ng-selected="'11' == bank.id" >{{bank.text}}</option> 

Aber auch hier: Dont tun es auf diese Weise, wie durch Lander beraten. Verwenden Sie stattdessen ng-options in <select>. Andernfalls werden Sie mit leerer erster Option im dropdown.assign bank.selected.id in Modell enden. (Hier in Ihrem Fall ng-Modell ist bank.id.)

<select ng-model="bank.selected.id" ng-change="someAngularfunction()" ng-options=" (''+bank.id) as (bank.id +' - '+ bank.text) for bank in banks"> 
        <option value="">Select one</option> 
</select> 

Denken Sie auch daran, dass der Wert Option wird nicht die Bank zeigt -Ist in den Optionen, es zeigt Option Wert = "0" oder "1" oder "3", die Index ist. Der ausgewählte Wert im Dropdown-Menü wird jedoch an das Modell bank.selected.id gebunden. Wenn z. B. der Dropdown-Wert für z. B. bank.id = 11 (XX Bank) ausgewählt wird, wird bank.selected.id auf "11" gesetzt.

Verwandte Themen