0
votes

Accéder et modifier des objets dans le composant parent

Comment puis-je mettre à jour un objet spécifique qui est transmis à l'enfant de parent. Dans mon modèle de parent, j'ai par exemple contenir 2 modèles enfants que je définis comme ça. XXX

La question est, comment puis-je maintenant mettre à jour la valeur de mon fichier de composant. Je souhaite pouvoir accéder à l'objet compinfo Lire et modifier et comment puis-je accéder aux différents objets en fonction du formulaire de formulaire?


0 commentaires

4 Réponses :


1
votes

Veuillez jeter un oeil.

sur votre TMPL: p> xxx pré>

sur app-ig-dropdown.ts: p>

public compInfos: Array<CompInfo> = [
 {
  guid :'820E04E0-8084-4D9C-A268-D8C0D21E74F6',
  width:'350px',
  placeHolder: ' -- Select --',
  fieldText:'Social Media 1'
 },
 {
  guid :'820E04E0-8084-4D9C-A268-D8C0D34E74F6',
  width:'350px',
  placeHolder: ' -- Select --',
  fieldText:'Social Media 2'
 }
]

public getCompInfo(guid): CompInfo {
  return this.compInfos.find(c => c.guid === guid);
}

public setCompInfo(compInfo): void {
 this.compInfos = this.compInfos.filter(c => c.guid!== compInfo.guid);
 this.compInfos.push(compInfo);
} 

//example function
public updateCompInfo(index): void {
 let compInfo: CompInfo = this.compInfos[index]; 
 compInfo.width = '100px';
 this.setCompInfo(compInfo);
} 


5 commentaires

Comment puis-je mettre à jour une valeur basée sur la valeur de la commande. Également basé sur votre exemple, il semble qu'il n'y a aucun moyen de spécifier les valeurs d'objet dans le modèle


Cela nécessite toujours de connaître l'index dans le tableau du contrôle avant que je puisse la mettre à jour. Si je connais l'index, je pourrais appeler un simple ceci.compinfos [0] .fieldtext = "démo";


Avez-vous essayé d'utiliser * ngfor?


Et vous devez produire une fonction de mise à jour dans un composant enfant comme ci-dessus


@Misterniceguy Comment ça va?



0
votes

J'ai fini par utiliser le code ci-dessous pour mettre à jour les valeurs car elles ne nécessitent pas de savoir à l'avance:

public updateArrayElement(formControlValue, element, newValue) {
    this.index = this.compInfos.findIndex(x => x.formControlName === formControlValue);
    this.compInfos[this.index][element] = newValue;
}


0 commentaires

0
votes

Vous ne pouvez pas mettre à jour le composant parent. Vous pouvez cependant envoyer un événement au parent. Dans votre composant enfant, ajoutez xxx pré>

pour mettre à jour l'objet, émettre un événement: p> xxx pré>

Vous devez définir les objets du composant parent : P>

interface CompInfo {
  public guid: string;
  public width: string;
  public placeHolder: string;
  public fieldText: string;
}


0 commentaires

0
votes

OK après plus d'autres recherches et joues autour de moi, j'ai compris une manière beaucoup plus simple.

Declare @viewchild in Parent XXX

Alors je peux obtenir des informations sur un enfant via xxx

et si je veux définir certains éléments de l'objet xxx

pas besoin d'index ou d'essayer de trouver une valeur pour un contrôle. Il suffit d'accéder à l'élément directement obtenir la valeur ou de la mettre à jour de parent.


0 commentaires