我正在努力将angularjs2与聚合物结合起来 . 我为聚合物输入元素创建了一个自定义ControlValueAccessor . 当我使用模型驱动程序表单时,我能够显示从组件到UI的值,但如果我在UI中更改值,则它不会反映到组件 . 似乎双向绑定不按预期工作 . 谁可以帮我这个事?
Angular版本:2.0.0-beta.1
import {Directive, ElementRef, Renderer, Self, forwardRef, Provider} from 'angular2/core';
import {isBlank, CONST_EXPR} from 'angular2/src/facade/lang';
import {DefaultValueAccessor} from "angular2/common";
import {NG_VALUE_ACCESSOR} from "angular2/common";
import {ControlValueAccessor} from "angular2/common";
const POLYMER_VALUE_ACCESSOR = CONST_EXPR(new Provider(
NG_VALUE_ACCESSOR, {useExisting: forwardRef(() => PolymerValueAccessor), multi: true}));
@Directive({
selector: 'paper-input',
host: {'(paper-input)': 'onChange($event.target.value)', '(blur)': 'onTouched()'},
bindings: [POLYMER_VALUE_ACCESSOR]
})
export class PolymerValueAccessor implements ControlValueAccessor {
onChange = (_) => {};
onTouched = () => {};
constructor(private _renderer: Renderer, private _elementRef: ElementRef) {
//this._elementRef.nativeElement.addEventListener('iron-input', (e) => {
// this.onChange(e.target.value);
//});
}
writeValue(value: any): void {
var normalizedValue = isBlank(value) ? '' : value;
this._renderer.setElementProperty(this._elementRef.nativeElement, 'value', normalizedValue);
//console.log(this._elementRef.nativeElement.renderView);
//this._elementRef.nativeElement.set('value', normalizedValue);
}
registerOnChange(fn: (_: any) => void): void { this.onChange = fn; }
registerOnTouched(fn: () => void): void { this.onTouched = fn; }
}