Je ne sais pas pourquoi Set & Obtenir les accesseurs ne change rien dans la valeur de la propriété _counter?
Lorsque j'utilise ceci.propagaChageChange strong> dans l'accessoir Voici mes codes: p> bouton.Commezent.ts strong> p> P> P> <form [formGroup]="prodForm">
<input [value]="prodForm.get('counter').value">
<app-button formControlName="counter"></app-button>
</form>
3 Réponses :
Vous devez utiliser _counter code> uniquement à l'intérieur de getter et de Setter. En dehors de vous devez utiliser compteur code>. export class ButtonComponent implements OnInit, ControlValueAccessor {
_counter = 0;
@Input() step = 1;
propagateChange;
get counter() {
return this._counter;
}
set counter(value) {
this._counter = value;
this.propagateChange(this._counter);
}
setDisabledState(isDisabled: boolean): void {
}
constructor() {
}
ngOnInit() {
}
incr() {
this.counter += this.step;
}
decr() {
this.counter -= this.step;
/*this.propagateChange(this._counter);*/
}
registerOnChange(fn: any) {
this.propagateChange = fn;
}
registerOnTouched(fn: any): void {
}
writeValue(obj: any): void {
if (obj !== undefined) {
this.counter = obj;
}
}
}
Pouvez-vous faire la différence entre cela.Conter et ceci. _Counter ici?
Si vous souhaitez ajouter une logique supplémentaire lors de la modification ou de la valeur de la propriété, vous pouvez utiliser Getter and Setter afin que nous ayons besoin d'une propriété pour conserver les données correctes (dans ce cas _Counter code>). Même, il devrait être privé parce que nous ne devrions pas la modifier en dehors de la composante. La logique supplémentaire ne peut être exécutée que lorsque nous opérons sur le nom de getter / Setter, donc dans ce cas, nous ne pouvons pas utiliser _counter code> Setter extérieur, nous devons utiliser compteur code> et et cela.propagaChage (this._counter); code> sera également exécuté.
Avez-vous non déconcéré? / * this.propagateechange (this._counter); * / code>
Oui, mais je l'ai résolu (vous pouvez vérifier ma réponse), mais votre réponse m'a également aidé avec le problème de référencement, alors je vous donne +1 :)
Vous devez faire référence à cela.Counter = Y Value; P>
Mais vous référencez cela._counter p>
Cela ne fonctionne toujours pas même si je change de référence à cela.Conter = myvalue;
J'ai résolu mon problème en modifiant cette ligne: à celui-ci: p> en plus de @kamil Augustyniak ==> Réponse A>, j'ai résolu ça. P> p>
Dans l'augmentation et la fonction DIP, vous avez écrit cela._counter, pas cela.Conter, alors ne passe pas à la fonction Setter
ça ne marche toujours pas ..
Vous pouvez vérifier ma solution @eliseo ici: Stackoverflow.com/a/60020655/8678900