2016-06-30 42 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

我會檢查一下,我的經驗是低的,所以這是設置通過這樣或更好的對象的價值領域的最好方法是走出層次結構中的所有組成部分,並通過方法更好地實踐來傳遞索引和值來設置它,還是有任何其他方式來設置此值? –