使用 *ngFor 缺少数组中的 Angular 2 第一项

标签 angular ngfor

使用 angular 快速入门应用程序 ( https://github.com/angular/quickstart/blob/master/README.md )。使用 Angular 2.1.1

使用 *ngFor,列表的第一项不会出现在页面上。我在控制台中没有收到任何错误,但是在 teacher.component.ts 中看到来自 ngOnInit 的以下控制台日志输出:

Erty
Dave
Sarah
Walter
undefined

最后一个“未定义”意味着数组的第一个元素正在被重新定义,但我不知道为什么。

这是输出的屏幕截图——代码贴在下面。

Screenshot showing the missing first element using *ngFor

请注意,重复块中缺少第一个老师,但不在 json 数组中。

代码:

老师.component.ts:
import { Component, Input } from "@angular/core";

@Component({
    selector: 'teacher',
    template: `
        <p>Teacher {{index}}: {{teacherName}}</p>
    `
})
export class TeacherComponent {
    @Input() teacherName: string;
    @Input() index: number;

    ngOnInit() {
        console.log(this.teacherName);
    }
}

app.module.ts:
import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

import { AppComponent }  from './app.component';
import { TeacherComponent } from './teacher.component';

@NgModule({
  imports: [ BrowserModule ],
  declarations: [TeacherComponent, AppComponent ],
  bootstrap: [ AppComponent, TeacherComponent ]
})
export class AppModule { }

app.component.ts:
import { Component } from '@angular/core';

import { TeacherComponent } from "./teacher.component";

@Component({
    selector: 'my-app',
    template: `<h1>CodeCraft Learning Angular!</h1>
        <pre>{{teachers | json}}</pre>
        <teacher *ngFor="let t of teachers; let i = index" [teacherName]="t" [index]="i"></teacher>

    `
})
export class AppComponent {
    public teachers: string[] = [
        "Erty",
        "Dave",
        "Sarah",
        "Walter"
    ];
}

感谢您的帮助!

最佳答案

问题是您正在 app.module 中引导教师组件,它被视为入口组件,这使我们的目的第一次渲染中断。

此更改将使其正确呈现:

import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';

import { AppComponent }  from './app.component';
import { TeacherComponent } from './teacher.component';

@NgModule({
  imports: [ BrowserModule ],
  declarations: [TeacherComponent, AppComponent ],
  bootstrap: [ AppComponent ]
})
export class AppModule { }

这里有一些关于引导什么的阅读https://angular.io/docs/ts/latest/cookbook/ngmodule-faq.html#!#q-bootstrap_vs_entry_component

关于使用 *ngFor 缺少数组中的 Angular 2 第一项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40291111/

相关文章:

twitter-bootstrap - 导入 bootstrap less 以扩展类会在 glyphicons 字体上创建 404

angular - ngI18nClosureMode 未定义

javascript - 管道数据过滤中的 Angular ngFor ngIF 条件

angular - 存在性能问题的选项卡内容

angular - *ng用于在添加新输入元素时重置所有表单值

angular - Ngx-Quill 和 ImageResize with Angular universal/SSR

angular - 事件和行为主题之间的区别

javascript - 区域检测所有任务何时完成

javascript - 绑定(bind)到 ngFor 中子组件的属性时出现循环依赖错误

angular - 完成 *ngFor 后调用一个函数