You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular中如何通过模板渲染多个Component类型变量

核心错误修正

你当前的实现思路有一个Angular开发的常见误区:不要手动通过new关键字实例化Angular组件。Angular组件的实例由框架内部的视图引擎自动创建和管理,手动new出的实例没有绑定渲染视图,也不会触发生命周期钩子,完全无法正常渲染使用。

正确实现步骤

1. 改造父组件,存储瓦片配置而非组件实例

你只需要在父组件存储每个瓦片需要的业务数据(比如坐标、内容、类型等),不要直接存组件实例:

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

// 按你的业务需求定义瓦片配置字段
export interface TileConfig {
  x: number;
  y: number;
  // 可自定义补充其他字段,比如瓦片内容、样式类型、状态等
}

function defaultMap() {
  let map: TileConfig[][] = [];
  for (var i = 0; i < 19; i++) {
    map[i] = [];
    for (var j = 0; j < 19; j++) {
      map[i][j] = { x: i, y: j };
    }
  }
  return map;
}

@Component({
  selector: 'app-world-viewer',
  templateUrl: './world-viewer.component.html',
  styleUrls: ['./world-viewer.component.scss']
})
export class WorldViewerComponent implements OnInit {
  tiles: TileConfig[][] = defaultMap();

  constructor() { }
  ngOnInit(): void {
  }
}

2. 改造Tile组件,接收输入属性

给TileComponent添加@Input装饰器,用来接收父组件传递的瓦片配置:

import { Component, Input } from '@angular/core';
import { TileConfig } from '../world-viewer/world-viewer.component';

@Component({
  selector: 'app-tile',
  templateUrl: './tile.component.html',
  styleUrls: ['./tile.component.scss']
})
export class TileComponent {
  @Input() tileConfig!: TileConfig;
}

你可以在Tile的模板里自由使用传入的配置,比如显示坐标:

<!-- tile.component.html -->
<div>
  坐标:{{ tileConfig.x }} - {{ tileConfig.y }}
</div>

3. 修改父组件模板,渲染Tile组件

直接在td内使用Tile的选择器app-tile,把当前遍历到的瓦片配置通过输入属性传入即可:

<table>
    <tbody>
        <tr *ngFor="let row of tiles">
            <td *ngFor="let tile of row">
                <app-tile [tileConfig]="tile"></app-tile>
            </td>
        </tr>
    </tbody>
</table>

注意事项

如果你使用的是Angular模块式开发,需要确保两个组件都在同一个NgModule的declarations数组中声明;如果是独立组件开发,需要在WorldViewerComponent的@Component装饰器的imports数组中导入TileComponent,否则模板会无法识别app-tile标签。

内容的提问来源于stack exchange,提问作者tower

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 20:06:02