0
votes

Définir et obtenir les accesseurs ne fonctionnent pas pour mon composant angulaire

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 SET STRAND> Il ne fonctionnera pas, mais quand je l'ai utilisé à l'intérieur INCR () strong> et DRID () FORT> Méthodes Il a fonctionné correctement, quel est le problème s'il vous plaît?

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 commentaires

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


3 Réponses :


1
votes

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;
    }
  }
}


4 commentaires

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 ). 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 Setter extérieur, nous devons utiliser compteur et et cela.propagaChage (this._counter); sera également exécuté.


Avez-vous non déconcéré? / * this.propagateechange (this._counter); * /


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 :)



0
votes

Vous devez faire référence à cela.Counter = Y Value;

Mais vous référencez cela._counter


1 commentaires

Cela ne fonctionne toujours pas même si je change de référence à cela.Conter = myvalue;



0
votes

J'ai résolu mon problème en modifiant cette ligne: xxx

à celui-ci: xxx

en plus de @kamil Augustyniak ==> Réponse , j'ai résolu ça.


0 commentaires