Angular Material2mat-selection-list)での作業、現在のオプションが選択されているか選択されていないかを識別できる[ブール値]。
compnenent.html
<mat-selection-list #shoes (selectionChange)="onSelection($event, shoes.selectedOptions)" >
<mat-list-option *ngFor="let shoe of typesOfShoes" [value]='shoe'>
{{shoe}}
</mat-list-option>
</mat-selection-list>
component.ts
export class ListSelectionExample {
typesOfShoes = ['Boots', 'Clogs', 'Loafers', 'Moccasins', 'Sneakers'];
onSelection(e, v){
console.error(e.option.selected,v);
}
}
e.option.selected
は、現在のオプションが選択されているかどうかを通知します。
現在選択されている値を識別する方法は? ngModelとngModelChangeおよびclickで複数の組み合わせを試しましたが、何も機能しません私。
https://stackblitz.com/edit/angular-eyjdfp-qgjhvd?file=app%2Flist-selection-example.ts
SelectionChange e.option.value
の$event
を取得することにより、現在選択されている値を取得できます。
component.ts
current_selected: string;
onSelection(e, v){
this.current_selected = e.option.value;
}
component.html
<p>
Current selected value: {{ current_selected }}
</p>
ボーナス
テンプレートでshoes.selectedOptions.selected
のselectedプロパティを呼び出すことにより、選択したすべてのアイテムをリストできます。
component.html
<p>Selected:</p>
<ul>
<li *ngFor="let i of shoes.selectedOptions.selected">
{{ i.value }}
</li>
</ul>
mat-list-option
でclick
イベントバインディングを使用します。
<mat-selection-list #shoes (selectionChange)="onSelection($event, shoes.selectedOptions)" >
<mat-list-option *ngFor="let shoe of typesOfShoes" [value]='shoe' (click)="getValue($event)">
{{shoe}}
</mat-list-option>
</mat-selection-list>
コンポーネントTypeScript:
getValue(event){
console.log(event.target.parentNode.innerText);
}
<mat-selection-list class="addressList" #userAddressList>
<mat-list-option *ngFor="let userAddress of userAddressesArray"
(click)="onAddressSelection(userAddress)">
{{userAddress}}
</mat-list-option>
</mat-selection-list>
In TypeScript
private onAddressSelection(selectedItem:any) {
let selectedOption = selectedItem;
}
私はこれに対する解決策を見つけるのにかなりの時間を費やしましたが、すべてが無駄になりました...幸いなことに、私はそれに対するアイデアを思いつきました。
---- checkListItemsは、公開するすべてのアイテムで構成される配列です----
<mat-selection-list #checkItems (selectionChange)="onSelection($event, checkItems.selectedOptions.selected)">
<mat-list-option *ngFor="let check of checklistItems">
{{check.label}}
</mat-list-option>
</mat-selection-list>
Mat-selection-listでは、選択したすべてのアイテムのイベントとvalueを送信しているため、このvalueは実際にMatSelectionListの配列です。そして、.tsファイルで選択したアイテムの値を解析する必要があります。
selectedOptions = [];
checkedValues = [];
onSelection(event, value) {
this.checkedValues = [];
this.selectedOptions = value;
for (let i = 0; i < this.selectedOptions.length; i++) {
this.checkedValues.Push(this.selectedOptions[i]._text.nativeElement.innerText);
}
}
そのため、MatSelectionList配列(この場合、私のvalue配列)は選択されているすべての項目で構成されるため、checkedValuesという配列があり、選択または選択解除が行われるたびに削除されます。そのため、毎回削除しない場合は、選択するたびに同じアイテムを追加し続けます。 (行this.checkedValues = []を削除し、forループの終了後にcheckedValues配列を出力することで、これを試すことができます)。
お役に立てれば!!
コンポーネント.tsで:
export class ListSelectionExample {
typesOfShoes = ['Boots', 'Clogs', 'Loafers', 'Moccasins', 'Sneakers'];
selectedShoes;
onSelection(e, v){
this.selectedShoes = v.selected.map(item => item.value);
console.error(e.option.selected,v);
}
}