BindLabelプロパティに2つの値を持つng-selectが必要です。私はこのようなものを持っています:
<ng-select placeholder="{{'TASKS.FOR_WHO' | translate }}"
name="users" [items]="users" bindLabel="firstName" >
</ng-select>
しかしbind labelでbindLabel = firstName + lastNameにしたいです。このような:
<ng-select placeholder="{{'TASKS.FOR_WHO' | translate }}"
name="users" [items]="users" bindLabel="firstName+lastName">
</ng-select>
これを達成する方法は?
ng-selectは、属性の文字列値のみを受け入れます。誤解しているかもしれませんが、bindLabel="firstName+lastName"
と言うと、ng-selectは存在しないitem[firstNamelastName]
を参照しようとしていると思います。
コレクションを変換するのが最善の選択肢だと思います。配列宣言の最後に.mapを追加し、テンプレートでbindLabel="fullName"
を使用できます。
[
{firstName: "John", lastName: "Doe"},
{firstName: "Jane", lastName: "Doe"}
].map((i) => { i.fullName = i.firstName + ' ' + i.lastName; return i; });
カスタムラベルとアイテムテンプレートを使用して表示することができます。
<ng-select [items]="users" bindLabel="firstName">
<ng-template ng-label-tmp let-item="item">
<span >{{ item.firstName + ' ' + item.lastName }}</span>
</ng-template>
<ng-template ng-option-tmp let-item="item" let-search="searchTerm" let-index="index">
<span >{{ item.firstName + ' ' + item.lastName }}</span>
</ng-template>
</ng-select>
カスタム値を返したい場合、最も簡単な方法はbindLabel="fullName"
およびコンポーネントからの戻り値、たとえば:
this.adaptedLoans = this.adaptedLoans.map(item => {
return {
"id": item.customer.id,
"name": item.customer.name,
"creditLimit": item.creditLimit,
"creditor": item.creditor,
"fullName": item.creditLimit + ' ' + 'CHF' + ' ' + this.translate.instant('filter_at') + ' ' + item.customer.name
}
});