2016-05-19 40 views
2

我正在嘗試使用Polymer paper-dropdown-menu控件在Angular2中創建表單。有沒有辦法將選定的下拉列表的值綁定到我的組件中的控件?我已經嘗試了一切,沒有運氣。有沒有人得到這個障礙?可以使用ngControl綁定聚合物紙張下拉菜單嗎?

一個例子的工作paper-input的是:

模板:

<paper-input type="password" 
      ngControl="password" 
      ngDefaultControl> 
</paper-input> 

組件:

constructor(private fb:FormBuilder) { 

    this.loginForm = fb.group({ 
     password: new Control("") 
    }); 
} 

是否有paper-dropdown-menu類似的東西?綁定到值或文本本身都可以。謝謝!

回答

1

您需要定製ControlValueAccessor。我沒有成功使用了paper-dropdown-menu本身ControlValueAccessor但裏面的paper-dropdown-menu

const PAPER_MENU_VALUE_ACCESSOR = new Provider(
    NG_VALUE_ACCESSOR, {useExisting: forwardRef(() => PaperMenuControlValueAccessor), multi: true}); 


@Directive({ 
    selector: 'paper-listbox', 
    host: {'(iron-activate)': 'onChange($event.detail.selected)'}, 
    providers: [PAPER_MENU_VALUE_ACCESSOR] 

}) 
export class PaperMenuControlValueAccessor implements ControlValueAccessor { 
    onChange = (_:any) => { 
    }; 
    onTouched =() => { 
    }; 

    constructor(private _renderer:Renderer, private _elementRef:ElementRef) { 
    console.log('PaperMenuControlValueAccessor'); 
    } 

    writeValue(value:any):void { 
    //console.log('writeValue', value); 
    this._renderer.setElementProperty(this._elementRef.nativeElement, 'selected', value); 
    } 

    registerOnChange(fn:(_:any) => {}):void { 
    this.onChange = fn; 
    } 

    registerOnTouched(fn:() => {}):void { 
    this.onTouched = fn; 
    } 
} 

paper-menupaper-listbox

+1

也做了見詭計,非常感謝! –

相關問題