Reputation: 1205
I am trying to use polymer paper-dropdown-menu and paper-listbox. Now I am having problem in binding.
Here is dropdown list:
<select name="singleSelect" [ngModel]="(person | async).department">
<option *ngFor="let x of departments">
{{x.name}}</option>
</select>
I converted into paper-listbox or paper-dropdown-menu
<paper-listbox #department
ngDefaultControl name="department"
[ngModel]="person.department"
label="department" >
<paper-item *ngFor="let x of departments">
{{ x.name }}
</paper-item>
</paper-listbox>
departments = [{name: 'HR'}, {name: 'IT'}, {name: 'Admin'}, {name: 'Management'}];
I couldn't get and set selected value.
Please help!
Upvotes: 0
Views: 318
Reputation: 343
This worked for me. Say you are trying to set the ngModel to a variable called item.setting
.
For my usage, I am using ngFor
to dynamically create a list of listboxes. You will need to make sure you include import { ViewChildren } from '@angular/core';
. The function setItemSetting()
will set whatever is selected on the listbox to item.setting
.
@ViewChildren('paperListbox') paperListboxes;
setItemSetting(index) {
return this.paperListboxes.toArray()[index].nativeElement.selected;
}
<div *ngFor="let item of items; let i = index;">
<paper-dropdown-menu label="Department">
<paper-listbox
ngDefaultControl
#paperListbox
class="dropdown-content"
(click)="item.setting = setItemSetting(i);">
<paper-item value="0">Item 1</paper-item>
<paper-item value="1">Item 2</paper-item>
</paper-listbox>
</paper-dropdown-menu>
</div>
If you only need one listbox, you can do something like this. In this example, you'll need to include import { ViewChild } from '@angular/core';
.
@ViewChild('paperListbox') paperListbox;
setItemSetting() {
return this.paperListbox.nativeElement.selected;
}
<paper-dropdown-menu label="Department">
<paper-listbox
ngDefaultControl
#paperListbox
class="dropdown-content"
(click)="item.setting = setItemSetting();">
<paper-item value="0">Item 1</paper-item>
<paper-item value="1">Item 2</paper-item>
</paper-listbox>
</paper-dropdown-menu>
Upvotes: 0
Reputation: 1205
Finally I found the solution:
<paper-dropdown-menu label="Department" #dropdown1>-->
<paper-listbox #department2 ngDefaultControl name="department2" class="dropdown-content" [ngModel]="(person | async).department"
selected="{{(person | async).department}}" attr-for-selected="value">
<paper-item *ngFor="let x of (departments|async)" [value]="x.label">
{{ x.label }}
</paper-item>
</paper-listbox>
Upvotes: 0