2016-06-13 13 views
5

ControlValueAccessorで "writeValue"を実行したときにngOnChangesがトリガーされないのはなぜですか?私はregisterOnChangeを経由して、いくつかのイベントを発するのですが、私はngOnChangesで任意のアクション@Input()プロパティが変更されたときにControlValueAccessorを更新すると、なぜngOnChangesがトリガーされないのですか?

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

@Component({ 
    moduleId: module.id, 
    selector: 'custom-input', 
    templateUrl: 'custom-input.html', 
    styleUrls: ['custom-input.css'], 
    directives: [CORE_DIRECTIVES], 
    providers: [CUSTOM_INPUT_CONTROL_VALUE_ACCESSOR] 
}) 
export class CustomInput implements ControlValueAccessor{ 

    private _text: any = ''; 
    public isValid:boolean = false; 


    onChange: EventEmitter<any> = new EventEmitter(); 
    onTouched: any; 


    constructor(private ngControl:NgControl) { 

    } 

    ngOnChanges(e) { 
    console.log('ngOnChanges'); 
    } 

    get text(): any { return this._text; }; 

    set text(v: any) { 
    if (v !== this._text) { 
     this._text = v; 
     this.onChange.emit(v); 
    } 
    } 

    writeValue(v) { 
    this.text = v; 
    } 
    registerOnChange(fn): void { 
    this.onChange.subscribe(fn); 
    } 
    registerOnTouched(fn): void { 
    this.onTouched = fn; 
    } 

} 

答えて

1

ngOnChangesが呼び出されるを参照してくださいいけません。

カスタム入力はテキストプロパティを持っていたとしますコンポーネント内から

<custom-input [text]="someVariable"></custom-input> 

変更コールバックをトリガしません:someVariable変更はときに

export class CustomInput implements OnChanges { 
    @Input() text; 

    ngOnChanges() { 
     console.log('ngOnChanges'); 
    } 
} 

ngOnChangesが呼び出されます。 ngOnChangesは入力用です。

https://angular.io/guide/lifecycle-hooks#lifecycle-sequence


注:ngOnChangesngOnInit

前に呼び出されます
関連する問題