Entwickeln einer Todo-Liste, die eine Aufgabe hinzufügen kann. Alles funktioniert, wenn der gesamte Code aus einer Komponente (Tasklist) und einem Service (Taskservice) besteht. Wenn Sie jedoch versuchen, eine Komponente von mehreren Komponenten zu trennen (Jobliste und Add-Task), wird die Tabelle mit der Liste der Aufgaben nicht bei Hinzufügen aktualisiert. Hier ist unsere Implementierung.Angular 2 RC1: Mehrere Komponenten, Todo-Liste, Taskaktualisierung hinzufügen
Tasklist:
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);
}
}
AddTaskComponent:
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);
}
}
Die addTask() -Methode zur Liste hinzufügt, aber führt nicht zu der Taskliste, es sei denn die in der Ansicht zu aktualisieren Seite aktualisiert.
Die grundlegende Frage: Wie kann eine einzelne Komponente korrekt in mehrere Komponenten aufgeteilt werden, ohne dass der Benutzer die Seite aktualisiert?