1

由于某种原因,该数组未传递给子组件。我错过了什么?

我的子组件:.html

<ul>
    <li *ngFor="let item of items">
        <a (click)="itemHasBeenClicked(item)">{{item}}</a>
    </li> 
<ul>

.ts

import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';


@Component({
  selector: 'app-three-dots-menu',
  templateUrl: './three-dots-menu.component.html',
  styleUrls: ['./three-dots-menu.component.sass']
})
export class ThreeDotsMenuComponent implements OnInit {

  constructor() { }

  @Input()
  public itemsList : string[];

  ngOnInit(): void {

  }

  @Output()
  itemClicked: EventEmitter<string> = new EventEmitter<string>();

  itemHasBeenClicked(item)
  {
    alert(item);
    this.itemClicked.emit(item);
  }
}

父组件:.html

<app-three-dots-menu  [itemsList]="menuItems"></app-three-dots-menu>

.ts

import { Component, OnInit } from '@angular/core';
@Component({
  selector: 'app-users-table',
  templateUrl: './users-table.component.html',
  styleUrls: ['./users-table.component.sass']
})
export class UsersTableComponent implements OnInit {

  constructor() { }
  menuItems : string[] = ['New User', 'Refresh'];

  ngOnInit(): void {  

  }



}

如果我在 ngOnInit 中初始化子组件(ThreeDotsMenuComponent)的 itemsList,它可以正常工作并显示。任何其他选项都不起作用,包括这一行

@Input()
  public itemsList : ["item1","Item2"];

我确定我在某处遗漏了一件小事,我已经遵循了许多说明并在这里和其他论坛上阅读了许多帖子,但仍然卡住了。

4

3 回答 3

1

在 ThreeDotsMenuComponent html 部分,您正在引用items,但您需要使用itemsList

<ul>
    <li *ngFor="let item of items"> <!-- here, use itemsList -->
        <a (click)="itemHasBeenClicked(item)">{{item}}</a>
    </li> 
<ul>
于 2020-04-15T08:49:09.853 回答
1

在您所指的子模板 html 中,items而不是itemsList

将子模板更改为:

<ul>
    <li *ngFor="let item of itemsList">
        <a (click)="itemHasBeenClicked(item)">{{item}}</a>
    </li> 
<ul>

看看以下内容:https ://stackblitz.com/edit/angular-v8sk5f?file=src%2Fapp%2Fchild%2Fchild.component.html

于 2020-04-15T08:43:23.420 回答
1

好吧,你必须使用=而不是:. 您正在定义属性的:类型,而不是实际值:

export class UsersTableComponent implements OnInit {
  menuItems: string[] = ['New User', 'Refresh'];
}
于 2020-04-15T08:22:16.823 回答