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>
PatrickCurl
quelle
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>
Bootscodierer
quelle
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 .

Mistalis
quelle