Angular 2 RC1:多个组件,Todo List,添加任务更新
Angular 2 RC1: Multiple components, Todo List, adding task update
开发能够添加任务的待办事项列表。当所有代码都是一个组件 (Tasklist) 和一项服务 (Taskservice) 时,一切正常。但是,当尝试将一个组件分离为多个组件(Tasklist 和 Addtask)时,包含任务列表的 table 不会在添加时更新。这是我们的实现。
任务列表:
import { Component, OnInit, Inject } from '@angular/core';
import { TaskService } from '../task.service';
import { Observable } from 'rxjs/Observable';
import { Task } from '../task';
@Component({
moduleId: module.id,
selector: 'app-tasklist',
providers: [TaskService],
template: '
<table>
<tr>
<td><a>Complete</a></td>
<td><a>Name</a></td>
<td><a>Due Date</a></td>
<td>Option</td>
</tr>
<tr *ngFor="let item of items" [items] = "items">
<td>
<p> {{item.Name}} </p>
</td>
<td>
<p> {{item.DueDate}} </p>
</td>
</tr>
</table>
',
styleUrls: ['tasklist.component.css']
})
export class TasklistComponent implements OnInit {
public items : Task[];
constructor(private service: TaskService ){}
ngOnInit(){
this.getTasks();
}
getTasks(){
this.service.Get().subscribe(e => this.items = e);
}
}
添加任务组件:
import { Component, Input} from '@angular/core';
import { TaskService } from '../task.service';
import { TasklistComponent } from '../tasklist/tasklist.component';
import { Task } from '../task';
@Component({
moduleId: module.id,
selector: 'app-addtask',
providers: [TaskService, TasklistComponent],
directives: [TasklistComponent],
template: '
<form>
<input type="text" [(ngModel)]="taskname" placeholder="Task name" >
<input type="text" [(ngModel)]="duedate" placeholder="Due Date" >
<input type="submit" value="Submit" (click)="addTask()" >
</form>
',
styleUrls: ['addtask.component.css']
})
export class AddtaskComponent {
public taskname : string;
public duedate : string;
@Input() items:Task[];
constructor(private service : TaskService){}
addTask(){
this.service.Post(this.taskname, this.duedate).subscribe(e=>{
this.getTasks();
return e;
});
this.taskname = '';
this.duedate = '';
}
getTasks() {
this.service.Get().subscribe(e => this.items = e);
}
}
addTask() 方法将其添加到列表中,但除非刷新页面,否则不会导致任务列表在视图中更新。
基本问题:如何在用户不刷新页面的情况下将单个组件正确拆分为多个组件?
不提供组件
providers: [TaskService, TasklistComponent],
应该是
providers: [TaskService],
组件只进入
directives: [TasklistComponent]
如果您在每个组件上提供 TaskService
,那么每个组件都会获得自己的实例。仅在根组件 (AppComponent
) 或要共享同一服务实例的元素的其他一些公共父级提供一次。
开发能够添加任务的待办事项列表。当所有代码都是一个组件 (Tasklist) 和一项服务 (Taskservice) 时,一切正常。但是,当尝试将一个组件分离为多个组件(Tasklist 和 Addtask)时,包含任务列表的 table 不会在添加时更新。这是我们的实现。
任务列表:
import { Component, OnInit, Inject } from '@angular/core';
import { TaskService } from '../task.service';
import { Observable } from 'rxjs/Observable';
import { Task } from '../task';
@Component({
moduleId: module.id,
selector: 'app-tasklist',
providers: [TaskService],
template: '
<table>
<tr>
<td><a>Complete</a></td>
<td><a>Name</a></td>
<td><a>Due Date</a></td>
<td>Option</td>
</tr>
<tr *ngFor="let item of items" [items] = "items">
<td>
<p> {{item.Name}} </p>
</td>
<td>
<p> {{item.DueDate}} </p>
</td>
</tr>
</table>
',
styleUrls: ['tasklist.component.css']
})
export class TasklistComponent implements OnInit {
public items : Task[];
constructor(private service: TaskService ){}
ngOnInit(){
this.getTasks();
}
getTasks(){
this.service.Get().subscribe(e => this.items = e);
}
}
添加任务组件:
import { Component, Input} from '@angular/core';
import { TaskService } from '../task.service';
import { TasklistComponent } from '../tasklist/tasklist.component';
import { Task } from '../task';
@Component({
moduleId: module.id,
selector: 'app-addtask',
providers: [TaskService, TasklistComponent],
directives: [TasklistComponent],
template: '
<form>
<input type="text" [(ngModel)]="taskname" placeholder="Task name" >
<input type="text" [(ngModel)]="duedate" placeholder="Due Date" >
<input type="submit" value="Submit" (click)="addTask()" >
</form>
',
styleUrls: ['addtask.component.css']
})
export class AddtaskComponent {
public taskname : string;
public duedate : string;
@Input() items:Task[];
constructor(private service : TaskService){}
addTask(){
this.service.Post(this.taskname, this.duedate).subscribe(e=>{
this.getTasks();
return e;
});
this.taskname = '';
this.duedate = '';
}
getTasks() {
this.service.Get().subscribe(e => this.items = e);
}
}
addTask() 方法将其添加到列表中,但除非刷新页面,否则不会导致任务列表在视图中更新。
基本问题:如何在用户不刷新页面的情况下将单个组件正确拆分为多个组件?
不提供组件
providers: [TaskService, TasklistComponent],
应该是
providers: [TaskService],
组件只进入
directives: [TasklistComponent]
如果您在每个组件上提供 TaskService
,那么每个组件都会获得自己的实例。仅在根组件 (AppComponent
) 或要共享同一服务实例的元素的其他一些公共父级提供一次。