简体   繁体   中英

How can I pass an array as Input() from the component template?

I need to pass an array of values to a component using binding, eg

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

However, it seems Angular treats this as string / string[1] (in the actual project the array is a route and I need to pass this route on to a component which has the [routerLink] directive).

How do I go about this?

You need to wrap the property with [] otherwise it is not processed by Angular at all:

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

Your example seems to set data from inside the component. This is not how binding works. What you can do with your component is <my-component [data]="[1, 2, 'test']"></my-component> to pass data from the outside to your component.

So lets's start from here... in Angular 2+ all input will pass down a string if they don't get brackets around...

So there are 2 ways to pass down your values...

if you write it like this: '<div data="[1, 2, 'test']"'

you basically get it as "[1, 2, 'test']" (as string)...

The way you doing is a good way for passing down strings , and you can also use interpolation and mix it with javascript before passing it down like 'Angular {{version}}'

So to pass it down as an Array or any javascript none-sting value, you need to use [] around your input like this...

<div [data]="[1, 2, 'test']"></div>

Normally you only use input when the component is nested within another component.

So in another component, something like: <my-component [data]= ...>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM