Ich versuche, das Auswahlfeld dazu zu bringen, mit einer vorgefüllten Option zu beginnen, indem ng-repeat mit AngularJS 1.1.5 verwendet wird. Stattdessen beginnt die Auswahl immer mit nichts ausgewähltem. Es hat auch eine leere Option, die ich nicht will. Ich denke, dass es einen Nebeneffekt gibt, wenn nichts ausgewählt wird.
Ich kann dies mit ng-options anstelle von ng-repeat zum Laufen bringen, aber ich möchte ng-repeat für diesen Fall verwenden. Obwohl mein eingegrenztes Beispiel es nicht zeigt, möchte ich auch das title-Attribut jeder Option festlegen, und soweit ich weiß, gibt es keine Möglichkeit, dies mit ng-options zu tun.
Ich glaube nicht, dass dies mit dem allgemeinen AngularJs-Problem mit dem Umfang / der prototypischen Vererbung zusammenhängt. Zumindest sehe ich bei der Inspektion in Batarang nichts Offensichtliches. Wenn Sie in der Auswahl mit der Benutzeroberfläche eine Option auswählen, wird das Modell außerdem korrekt aktualisiert.
Hier ist der 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>
Und das JavaScript:
function AppCtrl($scope) {
$scope.filterCondition={
operator: 'eq'
}
$scope.operators = [
{value: 'eq', displayName: 'equals'},
{value: 'neq', displayName: 'not equal'}
]
}
JS Fiddle dafür: http://jsfiddle.net/coverbeck/FxM3B/2/
quelle
Antworten:
OK. Wenn Sie nicht die richtige Methode verwenden möchten
ng-options
, können Sie einng-selected
Attribut mit einer Bedingungsprüflogik für dieoption
Direktive hinzufügen , damit die Vorauswahl funktioniert.Working Demo
quelle
Für das Select-Tag stellt Angular die Direktive ng-options bereit. Es gibt Ihnen das spezifische Framework, um Optionen einzurichten und einen Standard festzulegen. Hier ist die aktualisierte Geige mit ng-Optionen, die wie erwartet funktioniert: http://jsfiddle.net/FxM3B/4/
Aktualisiertes HTML (Code bleibt gleich)
quelle
Vielen Dank an TheSharpieOne für den Hinweis auf die von ng ausgewählte Option. Wenn das eher als Antwort als als Kommentar gepostet worden wäre, hätte ich das zur richtigen Antwort gemacht.
Hier ist eine funktionierende JSFiddle: http://jsfiddle.net/coverbeck/FxM3B/5/ .
Ich habe auch die Geige aktualisiert, um das title-Attribut zu verwenden, das ich in meinem ursprünglichen Beitrag weggelassen hatte, da es nicht die Ursache des Problems war (aber es ist der Grund, warum ich ng-repeat anstelle von ng-options verwenden möchte). .
HTML:
JS:
quelle
Die Tatsache, dass Angular ein leeres Optionselement in die Auswahl einfügt, besteht darin, dass das Modellobjekt, das standardmäßig daran gebunden ist, bei der Initialisierung einen leeren Wert enthält.
Wenn Sie eine Standardoption auswählen möchten, können Sie diese wahrscheinlich für den Bereich im Controller festlegen
Wenn Sie einen leeren Optionsplatzhalter möchten, funktioniert dies für mich
quelle
Wie vorgeschlagen müssen Sie ng-options verwenden, und ich glaube, Sie müssen leider auf das Array-Element als Standard verweisen (es sei denn, das Array ist ein Array von Zeichenfolgen).
http://jsfiddle.net/FxM3B/3/
Das JavaScript:
Der HTML:
quelle
Wenn Sie die md-select- und ng-repeat-md-Option aus eckigem Material verwenden, können Sie
ng-model-options="{trackBy: '$value.id'}"
die in diesem Stift angezeigte md-select-Tag-Asche hinzufügenCode:
quelle