import {Component, OnInit} from 'angular2/core';
import {Task} from './task';
import {TaskService} from "./task.service";
import {TaskListComponent} from './task-list.component';

@Component({
    selector:'tasks',
    templateUrl: './app/task.component.html',
    directives: [TaskListComponent],
    providers: [TaskService]
})

export class TaskComponent implements OnInit {
    task = new Task();
    public tasks: Task[];

    constructor(public _taskService: TaskService) { }

    getTasks() {
        this._taskService.getWsTask().subscribe(tasks => this.tasks = tasks);
    }

    ngOnInit() {
        this.getTasks();
    }

    onSubmit()
    {
        this.tasks = [...this.tasks, this.task]; 
        this.task = new Task();
    }
}
import {Task} from './task';
import {Injectable} from "angular2/core";
import {Http} from 'angular2/http';
import 'rxjs/add/operator/map';

@Injectable()
export class TaskService {
    tasks: Task[];

    constructor(public http: Http) {
        console.log('Task Service created.');
    }

    public getWsTask(){
        return this.http.get('http://localhost:3000/tasks')
            .map((responseData) => responseData.json())
            .map((tasks: Array<any>) => {
                let result: Array<Task> = [];
                if (tasks) {
                    tasks.forEach((task) => {
                        result.push(
                            new Task(task.name, task.status));
                    });
                }
                return result;
            });
            ;
    }

}
import {Component, Input, ChangeDetectionStrategy} from "angular2/core";
import {TaskService} from "./task.service";
import {DonePipe} from "./done-pipe";
import {LengthPipe} from "./count-pipe";

@Component({
    selector: 'task-list',
    pipes: [DonePipe,LengthPipe],
    templateUrl: './app/task-list.component.html',
    providers: [TaskService],
    changeDetection: ChangeDetectionStrategy.OnPush
})

export class TaskListComponent {
    @Input() tasks;
    constructor(public _taskService: TaskService){ }
}
<h2>Tasks List</h2>
<ul class="list-group">
    <li  class="list-group-item" *ngFor="#task of tasks">
        <button  class="btn btn-default btn-xs pull-right" (click)="task.setStatus('done')" *ngIf="(task.status == 'todo')">Done</button>
        {{ task.name }}
    </li>
</ul>
<div class="alert alert-info" role="alert" *ngIf="(tasks)">
    {{ tasks | done: false | length }} tasks to do
</div>
<div class="alert alert-success" role="alert" *ngIf="(!tasks)">
    Nothing to do !
</div>
<h2>Done Tasks</h2>
<ul class="list-group">
    <li  class="list-group-item" *ngFor="#task of task">
        {{ task.name }}
    </li>
</ul>
<h2>Add a task</h2>
<form (ngSubmit)="onSubmit()" #taskForm="ngForm">
    <div class="form-group">
        <label for="name">Task</label>
        <input type="text" class="form-control" required
               [(ngModel)]="task.name"
               ngControl="name" #name="ngForm">
    </div>
    <button type="submit" class="btn btn-default"
            >Submit</button>
</form>
<task-list [tasks]="tasks">Chargement des taches ... </task-list>