2016-06-30 40 views
4

我有输入组件:双向数据组件之间的对象绑定

<my-input *ngIf='filter.type === checkType.INPUT_TEXT' [filter]='filter'></my-input> 

export class MyInputComponent{ 
    @Input() filter: any; 
} 

MyInputComponent

<input name="name" [(ngModel)]="filter.input"> 

欲内部设置过滤器的输入和对外部部件对象影响模板。

如何将滤镜对象传入MyInputComponent实现2路数据绑定?

我想实现像[(ngModel)] =“filter.value”,但组件之间的工作

其他职位在这里大约2路数据绑定一点儿也不回答我的问题。

编辑:

在我MyInputComponent使用extends DefaultValueAccessor我父母分量输入在前看不见没有任何错误后。

import { Component, Input, OnInit, Provider, forwardRef } from '@angular/core'; 
import { FORM_DIRECTIVES, NG_VALUE_ACCESSOR, DefaultValueAccessor } from '@angular/common'; 

@Component({ 
    moduleId: module.id, 
    selector: 'my-input', 
    directives: [FORM_DIRECTIVES], 
    host: { '(keyup)': 'doOnChange($event.target)' }, 
    templateUrl: '<input name="name" [(ngModel)]="filter.input">' 
}) 

export class MyInputComponent extends DefaultValueAccessor { 
    @Input() filter: any; 

    onChange = (_) => {}; 
    onTouched =() => {}; 

    writeValue(filter:any):void { 
    if (filter !== null) { 
     super.writeValue(filter.toString()); 
    } 
    } 
    doOnChange(filter) { 
    this.onChange(filter); 
    } 
} 

const MY_VALUE_ACCESSOR = new Provider(
    NG_VALUE_ACCESSOR, {useExisting: forwardRef(() => MyInputComponent), multi: true}); 
+0

请参阅http://stackoverflow.com/q/38097777/652850 –

+0

从链接写入一些内容,然后通过链接支持。链接通常变得无效,你的答案变得毫无用处。 –

回答

2

您需要为此实现自定义值存取器。下面就是一个例子:

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

@Component({ 
    (...) 
    providers: [ MY_VALUE_ACCESSOR ] 
}) 
export class MyInputComponent extends DefaultValueAccessor { 
    onChange = (_) => {}; 
    onTouched =() => {}; 

    writeValue(value:any):void { 
    if (value!=null) { 
     super.writeValue(value.toString()); 
    } 
    } 

    // call when your internal input is updated 
    doOnChange(val) { 
    this.onChange(val); 
    } 
} 

有关详细信息,请参阅本文(节 “NgModel兼容设备”):

另见这个问题:

+0

我会检查一下,我的经验是低的,所以这是设置通过这样或更好的对象的价值领域的最好方法是走出层次结构中的所有组成部分,并通过方法更好地实践来传递索引和值来设置它,还是有任何其他方式来设置此值? –