2017-09-29 2 views
0

J'essaye d'implémenter ce answer comme j'ai essayé de créer mon propre FormControl personnalisé comme détaillé dans cette question aussi bien.Personnalisé ControlValueAccessor ne semble pas fonctionner pour ma propre directive FormControl

J'ai créé une coutume ControlValueAccessor et cela devient injecté comme valueAccessor dans le constructeur de ma FormControl directive, mais lorsque je tente l'enregistrement d'un rappel avec la fonction registerOnChange il ne sera jamais appelé.

En fait, aucun des membres ne semble être appelé.

J'ai lu beaucoup d'articles et de billets de blog, mais je n'arrive pas à comprendre ce qui me manque ou mal.

J'ai étendu le plunkr de question d'origine pour démontrer here.

Toute aide, ou pointeurs, serait grandement appréciée.

L'objectif est comme l'autre question de pouvoir faire @Component({..., template: '<input myFormControl...'}... pour enregistrer FormControls.

+0

Bienvenue sur SO! Consultez ce post sur la façon de poser des questions susceptibles de recevoir une réponse: https://stackoverflow.com/help/how-to-ask. Dans votre cas, vous pourriez montrer quelque chose de plus sur ce que vous avez essayé. –

Répondre

0

Vous y êtes presque :). Il y a un autre truc cependant.

Votre commande NgControl ne remet pas setUpControl fonction qui is called l'intérieur ngOnChanges de FormControlDirective. C'est parce que @Inputs de votre contrôle personnalisé ne sont pas modifiés. De plus, vous n'utilisez aucune entrée sur votre contrôle.

Mais vous pouvez l'exécuter manuellement:

import { SimpleChange } from '@angular/core'; 

export class HybridFormControlDirective extends FormControlDirective { 
    /* @override */ 
    constructor(...) { 
     super(validators, asyncValidators, valueAccessors); 
     this.form = new FormControl(''); 
     this.form.patchValue('test2'); 

     // manually call ngOnChanges to make sure that setUpControl is called 
     this.ngOnChanges({ 
     form: new SimpleChange(undefined, this.form, true) 
     }); 
    } 
} 

Plunker Example