Ist es möglich, Werte in Angular ng-options zu verketten?


72

Grundsätzlich versuche ich, ein Auswahlfeld zu füllen, aber Werte aus first_nameSpalte und last_nameSpalte zu verketten .

Was ich tun möchte (funktioniert nicht):

<select ng-model="buyers" ng-options="b.id as (b.first_name + " " + b.last_name) for b in buyers"></select>

Was funktioniert:

<select ng-model="buyers" ng-options="b.id as b.first_name for b in buyers"></select>

4
Ich habe das schon einmal gemacht und es funktioniert. Meine Syntax s.subsidiary.sid._value_ as s.subsidiary.subsidiary_no._value_ + ' :' + s.subsidiary.subsidiary_name._value_ for s in subsidiaries. Der einzige Unterschied, den ich sehen kann, ist, dass ich keine Klammern verwendet habe. Versuchen Sie, sie zu entfernen und prüfen Sie, ob es funktioniert.
— Jonathan Palumbo

Eine andere Möglichkeit wäre, vor dem Binden der Daten eine Eigenschaft namens full_name mit dem verketteten Wert zu erstellen.
— Jonathan Palumbo

3
Okay, das Problem waren die doppelten Anführungszeichen, die einfach benötigt wurden.
— PatrickCurl

Antworten:


133

Die Zitate sind wichtig. Es funktioniert nicht mit doppelten Anführungszeichen in doppelten Anführungszeichen oder einfachen Anführungszeichen in einfachen Anführungszeichen.

Was funktioniert:

<select ng-model="buyers" ng-options='b.id as (b.first_name + " " + b.last_name) for b in buyers'></select>

Ich habe diese Antwort hinzugefügt, um die Frage aus der Liste der unbeantworteten AngularJS-Fragen zu entfernen.
— Bootscodierer

1
Nur eine Anmerkung zu etwas, das mich gestolpert hat: Die Zitate sind wichtig. Es funktioniert nicht mit doppelten Anführungszeichen in doppelten Anführungszeichen oder einfachen Anführungszeichen in einfachen Anführungszeichen.
— Qaz

1
Absolut doppelte Anführungszeichen in doppelten Anführungszeichen funktionieren nicht, da sie die aktuelle Zeichenfolge beenden und eine andere beginnen. Sie müssen die Anführungszeichen wie oben verwechseln.
— Bootscodierer

Verwenden Sie stattdessen wie folgt: (b.first_name + '& nbsp;' + b.last_name). Das wird funktionieren.
— Jeeva Jsb

für mich 'b.id as (b.first_name + b.last_name) for b in buyers'hat perfekt funktioniert.
— Charliebrownie

4

Mit dieser Synthax können Sie eine Zeichenfolge verketten:

ng-options="i.x + ' ' + i.y for i in items"

Das folgende Snippet verkettet firstnameund lastname:

angular.module('myApp', []);

function MyCtrl($scope) {
  $scope.names = [{firstname: 'Jon', lastname: 'Snow'},
                  {firstname: 'Rob', lastname: 'Stark'},
                  {firstname: 'Ned', lastname: 'Stark'}];
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>

<div ng-app="myApp" ng-controller="MyCtrl">
  <select ng-model="selected" ng-options="n.firstname + ' ' + n.lastname for n in names"></select>
  selected: {{selected}}
</div>

Beachten Sie, dass keine Klammern erforderlich sind , die Lesbarkeit jedoch verbessert werden kann .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.