ngFor生成空内容 - Angular 7 IVY

3

我正在尝试使用Angular 7和Ivy进行开发,但无法使for循环输出任何值。

我的代码:

@Component({
  selector: 'app-asset-list',
  templateUrl: './asset-list.component.html',
  styleUrls: ['./asset-list.component.scss']
})
export class AssetListComponent implements OnInit {

  asset = {name: 'test'};
  assets: Asset[] = [this.asset];
  cols: any[] = [];


  colors: any[] = ['red', 'blue', 'yellow']; // EDIT: added this for debug

  constructor(private assetService: AssetService) {

  }

  ngOnInit() {
    // this.assetService.getAssets().subscribe((value => this.assets = value));
    this.cols = [
      {field: 'name', header: 'Name'}
    ];
  }

}

我的 HTML:

<h3>Asset List</h3>

<!--DEBUG-->
{{ assets | json }}
{{ cols |json}}

<!--Does not show-->
<div *ngIf="assets.length > 0">
  Oh, its greater than 0.
</div>

<!--also does not show-->
<ul>
  <li *ngFor="let a of assets">
    {{a}}
  </li>
</ul>

<!--also does not show-->
<ul>
  <li *ngFor="let c of cols">
    {{c}}
  </li>
</ul>

<!--EDIT: added for debug... also does not show?-->
<ul>
  <li *ngFor="let c of colors">
    {{c}}
  </li>
</ul>

<!--ultimately, this is what I wanted, but the above don't even work-->
<p-table [value]="assets">
  <ng-template pTemplate="header">
    <tr>
      <th *ngFor="let col of cols">
        {{col.header}}
      </th>
    </tr>
  </ng-template>
  <ng-template pTemplate="body" let-asset>
    <tr>
      <td *ngFor="let col of cols">
        {{asset[col.field]}}
      </td>
    </tr>
  </ng-template>
</p-table>

输出如下:

output

从结果可以看出,我从服务中删除了返回的Observable,但仍然无法工作。我期望在屏幕上看到一些东西,因为调试行显示了一些内容。我错过了什么?

我添加了一个字符串数组colors,只是为了进行更多的健全性检查...但仍未显示。控制台中没有错误。

我的package.json依赖项:

"dependencies": {
    "@angular/animations": "7.2.4",
    "@angular/common": "7.2.4",
    "@angular/compiler": "~7.2.4",
    "@angular/core": "7.2.4",
    "@angular/forms": "7.2.4",
    "@angular/platform-browser": "~7.2.0",
    "@angular/platform-browser-dynamic": "~7.2.0",
    "@angular/router": "~7.2.0",
    "core-js": "^2.5.4",
    "primeicons": "^1.0.0",
    "primeng": "^7.0.5",
    "rxjs": "~6.3.3",
    "tslib": "^1.9.0",
    "zone.js": "~0.8.26"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~0.13.0",
    "@angular/cli": "~7.3.1",
    "@angular/compiler-cli": "7.2.4",
    "@angular/language-service": "7.2.4",
    "@types/node": "~8.9.4",
    "@types/jasmine": "~2.8.8",
    "@types/jasminewd2": "~2.0.3",
    "codelyzer": "~4.5.0",
    "jasmine-core": "~2.99.1",
    "jasmine-spec-reporter": "~4.2.1",
    "karma": "~3.1.1",
    "karma-chrome-launcher": "~2.2.0",
    "karma-coverage-istanbul-reporter": "~2.0.1",
    "karma-jasmine": "~1.1.2",
    "karma-jasmine-html-reporter": "^0.2.2",
    "protractor": "~5.4.0",
    "ts-node": "~7.0.0",
    "tslint": "~5.11.0",
    "typescript": "~3.2.2"
  }

我无法在stackblitz上复制...问题与ivy有关,我相信。话虽如此,这里是stackblitz


你能添加一个 StackBlitz 来重现这个错误吗?我已经创建了一个并且一切正常 - 我很确定问题不在于你的 *ngFor 或者变量的构造方式。我相信你已经检查过了,但是有没有任何编译或 ng serve 的错误呢? - Nathan Beck
我在 StackBlitz 上重新编写了我的代码,但它可以正常工作... 无法复制。也没有出现 ng serve 或 ng build 错误。 - Jeff
我的猜测是它与 Ivy 有关,因为我认为 StackBlitz 没有使用 Ivy。 - Jeff
我将它推送到了Bitbucket:https://bitbucket.org/JDELL64/imagedam/src/master/ - Jeff
太糟糕了——本来希望它只是一些静默的编译错误。不过这肯定是Ivy的问题,尽管我没有看到任何与*ngForOf有关的活动问题。 - Nathan Beck
我把Ivy删掉了,然后它就开始工作了...不知道原因是什么? - Jeff
2个回答

1

当我在一个新的CLI项目中运行--experimentalIvy标志时,我遇到了完全相同的问题。

我还创建了一个问题: https://github.com/angular/angular/issues/30081

话虽如此, 我尝试使用以下命令更新核心和CLI到下一个版本:

ng update @angular/core@next @angular/cli@next

它适用于V8.0.0-beta.14,所以......我不确定在第7版中有人会修复它,而第8版即将发布。 此外,创建了一个Github仓库,分离了分支以便于重现,您可以在此处检查:https://github.com/eliraneliassy/ivy-ngfor-bug

我会说,如果在8中修复了,那已经足够了。 - Jeff

0
你可能需要使用点运算符来访问属性以查看输出,否则它将只是[Object Object]
<ul>
  <li *ngFor="let a of assets">
    {{a.name}}
  </li>
</ul>

STACKBLITZ


不幸的是,这也没有显示任何内容。另外,为什么其他的div都不起作用呢? - Jeff
你有检查 StackBlitz 吗?可能你正在展示不同的代码给我们看。 - Sajeetharan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接