Comment puis-je passer un tableau en tant Qu'Input() à partir du modèle de Composant?

J'ai besoin de passer un tableau de valeurs à un composant en utilisant la liaison, par exemple

@Component({
    selector: 'my-component',
    template: '<div data="[1, 2, 'test']"></div>
})
export class MyComponent {
    @Input() data: any[];
    ...
}

Cependant, il semble Angulaire traite cela comme string/string[1] (dans le projet, le tableau est une route, et j'ai besoin de passer cette route sur un composant qui a la [routerLink] "directive").

Comment puis-je aller à ce sujet?

23
demandé sur Thorsten Westheider 2016-07-04 09:40:18

3 réponses

Vous devez envelopper la propriété avec [] sinon elle n'est pas traitée par Angular du tout:

[data]="[1, 2, 'test']"

Votre exemple semble définir data depuis l'intérieur du composant. Ce n'est pas ainsi que la liaison fonctionne. Ce que vous pouvez faire avec votre composant est <my-component [data]="[1, 2, 'test']"></my-component> pour transmettre des données de l'extérieur à votre composant.

31
répondu Günter Zöchbauer 2016-07-04 06:41:17

Commençons donc à partir d'ici... dans Angular 2 + toutes les entrées passeront une chaîne si elles ne reçoivent pas de crochets...

Il y a Donc 2 façons de transmettre vos valeurs...

Si vous l'écrire comme ceci: '<div data="[1, 2, 'test']"'

Vous l'obtenez essentiellement comme "[1, 2, 'test'] " (en tant que chaîne)...

La façon dont vous faites est un bon moyen de transmettre strings , et vous pouvez également utiliser l'interpolation et la mélanger avec javascript avant de la transmettre comme ' Angular {{version}}'

Donc, pour le transmettre sous forme de tableau ou de toute valeur JavaScript none-sting, vous devez utiliser [] autour de votre entrée comme ceci...

<div [data]="[1, 2, 'test']"></div>
7
répondu Alireza 2017-12-07 23:05:17

Normalement, vous n'utilisez input que lorsque le composant est imbriqué dans un autre composant.

, Donc dans un autre composant, quelque chose comme: <my-component [data]= ...>

1
répondu DeborahK 2016-07-04 06:46:12