javascript - *ngFor 正在将父 div 添加到每个迭代元素

标签 javascript angular

我遇到了 *ngFor 的问题。它将为每个迭代元素添加父 div 元素

body.component.html

<ul class="nav nav-pills">
    <li class="nav-item">
        <a class="nav-link" href="#" [class.active]="tab=='Home'" (click)="changeTab('Home')">Home</a>
    </li>
    <li class="nav-item">
        <a class="nav-link" href="#" [class.active]="tab=='Products'" (click)="changeTab('Products')">Products</a>
    </li>
    <li class="nav-item">
        <a class="nav-link" href="#" [class.active]="tab=='Login'" (click)="changeTab('Login')">Login</a>
    </li>
</ul>

<div [ngSwitch]="tab">
    <div *ngSwitchCase="'Home'">Home</div>
    <div *ngSwitchCase="'Products'" class="row">
            <div *ngFor="let product of getProducts()">
                <div class="card">
                    <div class="card-body">
                        <div class="card-title">{{ product.Name }}</div>
                        <div class="card-text">
                            <p>
                                {{ product.Description }}
                            </p>
                        </div>
                    </div>
                </div>
            </div>
    </div>
    <div *ngSwitchCase="'Login'">Login</div>
</div>

body.component.ts

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

@Component({
  selector: 'app-body',
  templateUrl: './body.component.html',
  styleUrls: ['./body.component.css'],
})
export class BodyComponent implements OnInit {
  tab='Home';
  Products=[]; //Products Array
  constructor() { 

  }
  ngOnInit() {
  }
  changeTab(tab){
    this.tab=tab;
  }
  getProducts(){
    return this.Products;
  }

}

browser render screenshot

我该如何预防呢?

最佳答案

您可以使用<ng-container>而不是<div>

<ng-container> to the rescue.

The Angular is a grouping element that doesn't interfere with styles or layout because Angular doesn't put it in the DOM."

https://angular.io/guide/structural-directives#ng-container-to-the-rescue

<ng-container *ngFor="let product of getProducts()">
  <div class="card">
    <div class="card-body">
      <div class="card-title">{{ product.Name }}</div>
      <div class="card-text">
        <p>{{ product.Description }}</p>
      </div>
    </div>
  </div>
</ng-container>

https://alligator.io/angular/ng-container-element/

关于javascript - *ngFor 正在将父 div 添加到每个迭代元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58672507/

相关文章:

angular - ./node_modules/pdfjs-dist/build/pdf.js 中的警告

javascript - 从另一页面中的一项服务的回调函数获取结果

javascript - 将watermark.js添加到Angular 4

javascript - 下拉 HTML 表格

JavaScript RegExp [^...] 表达式未给出预期结果

javascript - jQuery绑定(bind)点击不添加元素

Angular 在后台显示推送通知

javascript - 我怎样才能实现这个逻辑

javascript - 单击具有相同类的新 Div 时隐藏其他 Div

javascript - 使用ajax和innerHTML插入时,图像不会在ie9中显示,直到用户右键单击并单击 "Show Pictures"