html - 如何使用express和Angular 2( typescript )编辑待办事项列表中的标题

标签 html node.js angular typescript

我使用express和Angular 2 - 待办事项列表在网络上制作了我的第一个应用程序。 现在我有添加新任务、删除和更改复选框的事件,但我不知道如何通过单击项目或按钮“编辑”来编辑标题。

my tasklist

任务.ts

export class Task{
    title: string;
    isDone: boolean;
}

文件 htmltasks.component.html

<div *ngFor="let task of tasks" class="todo">
  <button  class="delete icon">
      <i  class="material-icons">delete</i>
  </button>

 <button class="checkbox icon" (click)="updateStatus(task)">
      <i class="material-icons">{{task.isDone ? 'check_box' : 'check_box_outline_blank' }}</i>
 </button>

 <span class = "title"> {{task.title}}</span>

 <div class="actions" (click)="deleteTask(task._id)">
    <button class="delete icon">
       <i class="material-icons">delete</i>
    </button>
 </div>
 <div class="actions" (click)="////////////////////////EDIT/////////////">
     <button class="editicon">
        <i class="material-icons">edit</i>
      </button>
 </div>
 </div>

文件tasks.component.ts

import { Component } from '@angular/core';
import {TaskService} from '../../services/task.service';
import {Task} from '../../../Task';

@Component({
  moduleId: module.id,
  selector: 'tasks',
  templateUrl: 'tasks.component.html'
})

export class TasksComponent { 
    tasks: Task[];
    title: string;

    constructor(private taskService:TaskService){
        this.taskService.getTasks()
            .subscribe(tasks => {
                this.tasks = tasks;
            });
    }

    addTask(event){
        event.preventDefault();
        var newTask = {
            title: this.title,
            isDone: false
        }

        this.taskService.addTask(newTask)
            .subscribe(task => {
                this.tasks.push(task);
                this.title = '';
            });
    }

    deleteTask(id){
        var tasks = this.tasks;

        this.taskService.deleteTask(id).subscribe(data => {
            if(data.n == 1){
                for(var i = 0;i < tasks.length;i++){
                    if(tasks[i]._id == id){
                        tasks.splice(i, 1);
                    }
                }
            }
        });
    }

    updateStatus(task){
        var _task = {
            _id:task._id,
            title: task.title,
            isDone: !task.isDone
        };

        this.taskService.updateStatus(_task).subscribe(data => {
            task.isDone = !task.isDone;
        });
    }
}

文件task.service.ts

import {Injectable} from '@angular/core';
import {Http, Headers} from '@angular/http';
import 'rxjs/add/operator/map';

@Injectable()
export class TaskService{
    constructor(private http:Http){
        console.log('Task Service Initialized...');
    }

    getTasks(){
        return this.http.get('/api/tasks')
            .map(res => res.json());
    }

    addTask(newTask){
        var headers = new Headers();
        headers.append('Content-Type', 'application/json');
        return this.http.post('/api/task', JSON.stringify(newTask), {headers: headers})
            .map(res => res.json());
    }

    deleteTask(id){
        return this.http.delete('/api/task/'+id)
            .map(res => res.json());
    }

    updateStatus(task){
        var headers = new Headers();
        headers.append('Content-Type', 'application/json');
        return this.http.put('/api/task/'+task._id, JSON.stringify(task), {headers: headers})
            .map(res => res.json());
    }
}

最佳答案

您可以考虑以下几点。

  • id 添加到您的 Task 类中,它将帮助您识别要更新的任务。
  • 将该id传递给编辑操作并使用任务文本填充您的输入控件
  • 用户完成更新任务后,您可以将任务 ID 和文本发送到服务器。

关于html - 如何使用express和Angular 2( typescript )编辑待办事项列表中的标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44670460/

相关文章:

javascript - 更改悬停 html/css 后出现的背景图像的位置

javascript - JS Canvas - 保存透明图像

node.js - ChromeOptions 使用 Selenium ChromeDriver for node.js 导致引用错误

javascript - 分层缩进

javascript - 在 Angular 中使用 ViewChild() 获取元素

caching - 在 Angular2 中使用 RxJs 5 为 REST 客户端提供基于时间的缓存

javascript - 在 JavaScript 计算器中添加两位数时出现问题

jquery - 仅在一个元素中应用函数

node.js - JSON 中视频长度位置 0 处出现意外标记 G

javascript - Mongoose 随机不起作用?