在 AngularDart 中使用 *ngFor 时如何为每个元素设置自定义模型对象

How to set custom model object for each element when using *ngFor in AngularDart

我有一个 Angular Dart 页面,我需要在其中为集合中的每个项目在屏幕上创建一个组件。这些项目是自定义模型对象:

    class CohortDataSourceAssay{
      String name;
      String displayName;
      bool selected;
      List<String> platforms = new List<String>();

      CohortDataSourceAssay();
    }

我有一个父页面,我想在其中为上面 class 集合中的每个元素创建一个模板:

    <data-source-assay *ngFor="let assay of dataSource.assays"></data-source-assay>

这是数据源分析组件的标记:

    <div class="dataSourceAssay">
        <material-checkbox [(ngModel)]="assay.selected" (ngModelChange)="onCbxChange($event)">{{assay.displayName}}</material-checkbox>
        <material-dropdown-select class="selectStyle"
                                  [disabled]="!assay.selected"
                                  [buttonText]="platformLabel"
                                  [selection]="assaySequencingPlatforms"
                                  [options]="sequencingPlatforms"
                                  [itemRenderer]="itemRenderer">
        </material-dropdown-select>
    </div>

只要它为 dataSource.assays 中的每个化验元素加载一个块,此方法就可以工作,但是化验块似乎没有获取化验模型对象。它似乎为空。我如何传递它?

您需要在 <data-source-assay> 组件上声明一个 @Input(),通过它您可以传递 assay 值。

@Component(...)
class DataSourceAssayComponent {
  // An input makes this property bindable in the template via [] 
  // notation.
  //
  // Note: I'm not actually sure what the type of `assay` is in your
  // example, so replace `Assay` with whatever the correct type is.
  @Input()
  Assay assay;
}

现在,在您创建此组件的模板中,您可以将 assay 值绑定到输入。

<data-source-assay
    *ngFor="let assay of dataSource.assays"
    [assay]="assay">
</data-source-assay>

请记住,模板中的本地值是该模板的本地值。这意味着您在 ngFor 中声明的 assay 在当前模板之外的任何地方都不可见。