放入自己的组件后卡片对象发生变化

card object changes after putting inside a own component

我已经创建了一个包含 bootstrap 卡片的响应列表,这些卡片将显示信息。这些卡片当前由页面组件内的 *ngIf 创建。现在我想将卡片项目移动到它自己的组件中。执行此操作时格式会更改。

我试过将卡片封装在它们自己的 ng-container 中(仍然可以正常工作),但这对我一点帮助都没有。

我对使用组件的理解是,它应该像使用 ng-container 时一样注入 html 代码,或者我是否遗漏了一个重点?

Screenshot

在一个组件中工作:

<div class="container">
  <div class="row">
    <div *ngFor="let device of devices" class="col-4 mb-4">
      <div class="card h-100">
        <div class="card-body">
          <p>some content</p>
        </div>
      </div>
    </div>
  </div>
</div>

分成多个部分:

页面组件(页面列表):

<div class="container">
  <div class="row">
    <app-device-list-item></app-device-list-item>
    <app-device-list-item></app-device-list-item>
  </div>
</div>

设备组件(设备列表项):

div class="col-4 mb-4">
  <div class="card h-100">
    <div class="card-body">
      some content
    </div>
  </div>
</div>

预期结果:设备应以与在一个组件内呈现时相同的方式呈现

实际结果:它们的渲染方式不同(见屏幕截图)

这里的问题是您提供给 div 的 CSS 类 包含 *ngFor 属性,即 class="col-4 mb-4" 类。您需要将这些 类 移到设备组件之外。

尝试将您的代码更改为以下内容

页面组件(page-list)

<div class="container">
  <div class="row" *ngFor="let device of devices" class="col-4 mb-4">
    <app-device-list-item></app-device-list-item>
  </div>
</div>

设备组件(device-list-item)

<div class="card h-100">
  <div class="card-body">
    some content
  </div>
</div>

这是 StackBlitz

上的一个工作示例

您的最终标记如下所示,device-list-item 组件的内容包含在 <app-device-list-item> 元素中,浏览器默认将其视为 <span> 元素:

<div class="container">
  <div class="row">
    <app-device-list-item>
      <div class="col-4 mb-4">
        <div class="card h-100">
          <div class="card-body">
            some content
          </div>
        </div>
      </div>
    </app-device-list-item>
    <app-device-list-item>
      <div class="col-4 mb-4">
        <div class="card h-100">
          <div class="card-body">
            some content
          </div>
        </div>
      </div>
    </app-device-list-item>
  </div>
</div>

您必须在此包装元素(Angular 术语中的主机)上应用 col-4 mb-4 CSS 类 以应用所需的样式:

@Component({
  selector: 'app-device-list-item',
  ...
  host: {
    class: 'col-4 mb-4'
  }
})