Angular 第一次出现的角度2未定义
我正在尝试Angular 2,我面临着一个奇怪的问题,我不明白 我制作了一个简单的待办事项列表,当我执行我的应用程序时,我会收到以下错误消息: 我不明白为什么迭代的第一次出现是未定义的。我的数组是硬编码的,所以我不知道为什么会出现这个问题。 以下是此应用程序的代码: app.module.tsAngular 第一次出现的角度2未定义,angular,Angular,我正在尝试Angular 2,我面临着一个奇怪的问题,我不明白 我制作了一个简单的待办事项列表,当我执行我的应用程序时,我会收到以下错误消息: 我不明白为什么迭代的第一次出现是未定义的。我的数组是硬编码的,所以我不知道为什么会出现这个问题。 以下是此应用程序的代码: app.module.ts import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-brows
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { TodoNavComponent } from './app.todo-nav';
import { TodoListComponent } from './app.todo-list';
import { TodoComponent } from './app.todo';
@NgModule({
imports: [ BrowserModule ],
declarations: [ TodoNavComponent, TodoListComponent, TodoComponent ],
bootstrap: [ TodoNavComponent, TodoListComponent, TodoComponent ]
})
export class AppModule { }
app.todo-list.ts
import { Component } from "@angular/core";
import { TodoService } from "./app.service";
@Component({
selector: "todo-list",
template: `
<div class="container">
<ul class="list-group">
<todo *ngFor="let todo of todos" [todo]="todo"></todo>
</ul>
</div>`,
providers: [TodoService]
})
export class TodoListComponent {
todos: any[] = [
{ name: "Do shopping", done: false },
{ name: "Get some gaz for my car", done: true },
{ name: "Download last season of Game of Thrones", done: false }
];
constructor(private service: TodoService) {
service.todoAdded$.subscribe(
todo => {
this.todos.push(todo);
}
);
service.todoRemoved$.subscribe(
todo => {
this.todos = this.todos.filter(
(value, index, array) => {
return todo.name !== value.name;
}
);
}
);
}
}
从“@angular/core”导入{Component};
从“/app.service”导入{TodoService};
@组成部分({
选择器:“待办事项列表”,
模板:`
`,
提供者:[TodoService]
})
将类导出到olistComponent{
待办事项:任何[]=[
{name:“购物”,done:false},
{name:“给我的车加油”,完成:真的},
{name:“下载上一季的权力游戏”,完成:false}
];
构造函数(专用服务:TodoService){
服务。ToLoaded$。订阅(
todo=>{
这个.todo.push(todo);
}
);
service.todoRemoved$。订阅(
todo=>{
this.todos=this.todos.filter(
(值、索引、数组)=>{
返回todo.name!==value.name;
}
);
}
);
}
}
app.todo.ts
import { Component, OnDestroy, Input } from "@angular/core";
import { TodoService } from "./app.service";
import { Subscription } from 'rxjs/Subscription';
@Component( {
selector: "todo",
template: `
<li class="list-group-item">
<i class="pull-right glyphicon glyphicon-remove" (click)="remove()"></i>
{{todo.name}}
</li>`,
providers: [TodoService]
})
export class TodoComponent implements OnDestroy {
@Input() todo;
subscription: Subscription;
constructor(private service: TodoService){
this.subscription = service.todoAdded$.subscribe(
todo => {
this.todo = todo;
}
);
}
remove() {
this.service.removeTodo(this.todo);
}
ngOnDestroy() {
this.subscription.unsubscribe();
}
}
import{Component,OnDestroy,Input}来自“@angular/core”;
从“/app.service”导入{TodoService};
从'rxjs/Subscription'导入{Subscription};
@组件({
选择器:“待办事项”,
模板:`
{{todo.name}
`,
提供者:[TodoService]
})
导出类TodoComponent实现OnDestroy{
@输入()todo;
认购:认购;
构造函数(专用服务:TodoService){
this.subscription=service.ToLoaded$.subscripte(
todo=>{
this.todo=todo;
}
);
}
删除(){
this.service.removeTodo(this.todo);
}
恩贡德斯特罗(){
this.subscription.unsubscripte();
}
}
以下是渲染:
我错过了什么?
我不明白为什么它只是第一次发生而不是其他的
谢谢大家!
Object?.name将帮助您循环Ok,对于使用的服务,我只是按照文档进行操作,我现在使用的是OnInit,但这并不能解决第一次迭代时未定义的问题。当我在构造函数中订阅我的服务时,我找到了它,因为服务是通过构造函数的参数提供给我的,现在我可以在哪里找到服务?这只会产生更多错误。我只是想了解为什么loop指令没有正确迭代硬编码数组的第一项。这里解释了此错误的修复方法: