J'ai un élément de portfolio qui est utilisé dans un composant parent, web-portfolio.html, qui récupère des données à partir de web-portfolio.ts.
J'essaie de transmettre des données à partir d'un tableau dans le web-portfolio .ts dans une boucle * ngFor.
<div class = "portfolio-item"> <div class = "portfolio-thumb"> <a (click) = "this.isOpen = !this.isOpen"> <img src = "" alt = ""/> </a> </div> <div class = "portfolio-full" [ngClass] = "{'port-show':this.isOpen}"> <div class = "portfolio-full-image" (click) = "this.isOpen = !this.isOpen"> <img src = "{{this.img}}"> <div class = "portfolio-description"> {{this.description}} </div> </div> </div> </div>
Le composant app-portfolio a des entrées pour ceux-ci:
export class WebPortfolioComponent implements OnInit { sites = [ { "name":"Site A", "description": "Lorem Ipsum", "img":"/web/sitea.png", "link":"http://sitea.com" }, { "name":"Site B", "description": "Lorem Ipsum", "img":"/web/siteb.png", "link":"http://siteb.com" }, { "name":"Site C", "description": "Lorem Ipsum", "img":"/web/siteC.png", "link":"http://siteC.com" }, ]; } // OUTPUT => Blank, blank, blank
Mais au lieu d'obtenir la sortie correcte, je reçois trois de la valeur initiale du tableau;
export class PortfolioComponent implements OnInit { isOpen: boolean = false; @Input() name: string; @Input() img: string; @Input() description: string; @Input() link: string; }
Qu'est-ce que je fais mal?
portfolio.component.html:
<app-portfolio *ngFor = "let site of this.sites" name = "site.name" img = "site.img" description = "site.description" link = "site.link"></app-portfolio>
3 Réponses :
Vous devez ajouter {{}} pour le composant de propriété name = "{{site.name}}"
<app-portfolio *ngFor = "let site of this.sites" name = "{{site.name}}" img = "{{site.img}}" description = "site.description" link = "site.link"></app-portfolio>
https://stackblitz.com/edit/angular-ns1qli
La mise à jour de votre HTML fonctionnait toujours p>
https://stackblitz.com /edit/angular-input-parameter?file=src/app/portfolio.html
Cela ne semble pas faire de différence, malheureusement
On dirait que j'ai fait une erreur en omettant l'image src dans le HTML. Merci pour votre démo!
Le img
est un attribut html, il ne peut donc pas être utilisé avec @Input
donc veuillez utiliser [image]
à la place, veuillez vérifier ce qui suit exemple.
Enveloppez simplement le composant comme une liaison de propriété dans Angular
<app-portfolio *ngFor = "let site of this.sites" [name] = "site.name" [img] = "site.img" [description] = "site.description" [link] = "site.link"></app-portfolio>
Partagez le code HTML de
PortfolioComponent
.Est-ce une faute de frappe d'écrire
nom
et non[nom]
?Ni le nom ni [nom] ne semblent fonctionner. Laquelle est correcte, [nom]? @pindev
@Samuel Done. On dirait qu'à l'origine il y avait des images et du texte alternatif là-dedans; maintenant, je n'ai plus que trois blancs.
Il doit s'agir de
name = "{{site.name}}"
ou[name] = "site.name"
Votre code semble correct lorsque vous modifiez votre code html en tant que commentaire de @ pindev. Je me demandais si la valeur des
dans votre html pour en afficher la valeur. Et vous n'avez pas besoin d'écrire
sites
avait été modifiée quelque part. Essayez d'écrire{{sites | json}}
ceci.
en html. Vous pouvez simplement utiliserimg
,name
et etc.