angular7实现todolist功能(本地存储、服务)

使用angular服务、本地存储实现todolist

服务的创建与使用:

创建服务

ng g s services/storage	

服务的配置:在app.module.ts中引入并声明

import { StorageService } from './services/storage.service';

providers: [StorageService]

使用:在使用的组件的ts中引入并使用

import { StorageService } from 'src/app/services/storage.service';

constructor(public storage: StorageService) { // 获取服务的实例
    let serverGet = storage.get();
    console.log(serverGet)
}

html:

<div class="container">
  <input type="text" [(ngModel)]="keyword" (keyup)="doAdd($event)">
  <hr>
  <h3>待办事项:</h3>
  <ul>
    <li *ngFor="let item of todolist; let key = index;" [hidden]="item.status == 1">
      <input type="checkbox" [(ngModel)]="item.status" (change)="checkBoxChange()" />
      {{item.title}} -----------
      <button (click)="deleteData(key)">删除</button>
    </li>
  </ul>
  <h3>已完成事项:</h3>
  <li *ngFor="let item of todolist; let key = index;" [hidden]="item.status == 0">
    <input type="checkbox" [(ngModel)]="item.status" (change)="checkBoxChange()" />
    {{item.title}} -----------
    <button (click)="deleteData(key)">删除</button>
  </li>
</div>

ts:

import { Component, OnInit } from '@angular/core';
import { StorageService } from 'src/app/services/storage.service';

@Component({
  selector: 'app-todolist',
  templateUrl: './todolist.component.html',
  styleUrls: ['./todolist.component.styl']
})
export class TodolistComponent implements OnInit {

  public keyword: string;
  public todolist: any[] = [];

  constructor(public storage: StorageService) {
    
  }

  ngOnInit() {
    let todolist: any = this.storage.get("todolist");
    if(todolist) {
      this.todolist = todolist;
    }
  }

  doAdd(e) {
    if (e.keyCode == 13) {
      if(!this.todolistHasKeyword(this.todolist, this.keyword)) {
        this.todolist.push({
          title: this.keyword,
          status: 0 // 0表示待办事项,1表示已完成事项
        });
        this.keyword = '';
        this.storage.set("todolist", this.todolist);
      }else {
        alert("数据已存在!");
      }
    }
  }

  checkBoxChange() {
    console.log('tag', '')
  }

  deleteData(index) {
    this.todolist.splice(index, 1);
    this.storage.set("todolist", this.todolist);
  }

  todolistHasKeyword(todolist: any, keyword: any) {
    // 异步会存在问题
    // todolist.forEach(value => {
    //   if(value.title == keyword) {
    //     return true;
    //   }
    // });
    if(!keyword) return false;
    for(var i = 0 ; i < todolist.length ; i++) {
      if(todolist[i].title == keyword) {
        return true;
      }
    }
    return false;
  }
}

services:

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class StorageService {

  constructor() { }

  set(key: string, value: any) {
    localStorage.setItem(key, JSON.stringify(value));
  }

  get(key: string) {
    return JSON.parse(localStorage.getItem(key));
  }

  remove(key: string) {
    localStorage.removeItem(key);
  }

}

效果:
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值