一、实现todoList的demo

功能很简单,提供一个文本框,用户输入回车后添加新条目。每个条目可以在待处理和处理中两个区域间切换,每个条目都可以被删除,大致的界面如下图所示:

二、处理逻辑

首先将前台的input文本框和后台的变量双向绑定,然后后台需要一个list数组保存多个事项,html页面将list中的对象遍历显示,每一个遍历的元素都需要一个删除按钮,以及切换按钮,前者触发后台数据删除list中的对应对象,后者触发后台改变list中对应对象的属性,从而改变对象在前台的显示位置,具体的html代码如下图所示,这里有一点需要注意,没有办法同时在一个标签内同时使用*ngFor和*ngIf两个属性,否则编译时会报错

在这里有一个细节需要注意,不要把slice与splice弄混淆。

slice(start,end):方法可从已有数组中返回选定的元素,返回一个新数组,包含从start到end(不包含该元素)的数组元素。

    splice(index,number,additem1,additem2):该方法向或者从数组中添加或者删除项目,返回被删除的项目(该方法会改变原数组)。后台的具体代码如下所示:

三、实现数据缓存

如何实现数据缓存?也就是页面刷新后,添加的数据依然可见?

首先需要知道什么叫服务?

在AngularJs中所有的页面都可以作为组件来对待,但是有一些公共业务逻辑,在多个组件中都会用到,这时我们可以把它提取成一个服务。

创建服务的方式和创建组件的方式类似,使用AngularCLI创建,使用如下命令:

ng g service my-new-service

在项目的根目录中创建服务(先在app目录下创建services文件夹),最终会生成两个文件,一个开发文件,一个测试文件,如下图所示:

ng g service services/storage

在生成的类中添加一个方法setItem(key,value),localStorage.setItem(key,JSON.stringify(value)),添加一个方法getItem(key),return JSON.parse(localStorage.getItem(key)),添加一个方法removeItem(key),localStorage.removeItem(key),保存数据的时候需要将对象转换为json字符串,获取数据时需要转换为Json对象

这样服务就算是封装好了,但是需要在app.module中引入服务,注入服务,并且在其他组件引入服务

1、引入服务:import {StorageService} from ‘./services/storage.service’   (注意:路径一定要写对)

2、注入服务:providers:[StorageService]

创建服务的方式一(不推荐):

直接在相应组件的ts文件创建StorageService对象,就可以使用该服务

public storage = new StorageService();

this.storage.setItem(“”);

    创建服务的方式二(推荐):

在构造函数中依赖注入服务(什么叫做依赖注入)

constructor(private storage:StorageService){

//注入后就可以使用this.storage来调用storage中的服务

}

具体编写逻辑

每次新增条目的时候:从storage获取数据,如果有数据,就将新的数据加入其中,重新写入storage,如果storage中没有数据,直接将新的对象放到storage服务中,如下图所示:

转换条目的时候:直接将整个list重新保存到storage服务中,如下图所示:

页面初始化的时候:将storage中的数据绑定到list中,如下图所示:

转载于:https://www.cnblogs.com/mrnx2004/p/9671320.html

初探AngularJs框架(三)相关推荐

  1. 现在就开始使用AngularJS的三个重要原因

    日期:2013-1-21  来源:GBin1.com 在线演示 如果你不熟悉什么是Angular.js的话,小编我强烈推荐你阅读 Javascript教程:AngularJS的五个超酷特性.简单来说A ...

  2. AngularJS第三课:MVW与控制器

    2019独角兽企业重金招聘Python工程师标准>>> 一.名词解释:MVC.MVVM和MVW MVC:Model-View-Controller,模型-视图-控制器,核心思想:把数 ...

  3. 精通AngularJS(三)深入scope,继承结构,事件系统和生命周期

    深入探讨 Scope 作用域 每一个 $scope 都是类 Scope 的一个实例.类 Scope 拥有可以控制 scope 生命周期的方法,提供事件传播的能力,并支持模板渲染. 作用域的层次结构 让 ...

  4. 【转】初探计算机视觉的三个源头、兼谈人工智能

    初探计算机视觉的三个源头.兼谈人工智能|正本清源 2016-12-12 视觉求索 谈话人: 杨志宏 视觉求索公众号编辑 朱松纯 加州大学洛杉矶分校UCLA统计学和计算机科学教授 Song-Chun Z ...

  5. 初探计算机视觉的三个源头、兼谈人工智能|正本清源

    初探计算机视觉的三个源头.兼谈人工智能|正本清源 谈话人 杨志宏 视觉求索公众号编辑 朱松纯 加州大学洛杉矶分校UCLA统计学和计算机科学教授 Song-Chun Zhu www.stat.ucla. ...

  6. Jersey框架三:Jersey对HTTPS的支持

    Jersey系列文章: Jersey框架一:Jersey RESTful WebService框架简介 Jersey框架二:Jersey对JSON的支持 Jersey框架三:Jersey对HTTPS的 ...

  7. 10 个非常有用的 AngularJS 框架

    AngularJS是最流行的开源web app框架.AngularJS被用于解决阻碍单页应用程序开发的各种挑战. 你作为一个AngularJS用户,却不知道一些可以帮助你美化编码的资源?那么一定不能错 ...

  8. 朱松纯:初探计算机视觉的三个源头_兼谈人工智能

    来源:http://www.stat.ucla.edu/~sczhu/Blog_articles/正本清源:%20初探计算机视觉的三个源头_兼谈人工智能.pdf 我觉得他讲的挺好,机器学习其实并没有本 ...

  9. 胖虎谈ImageLoader框架(三)

    前言 从学校出来的这半年时间,发现很少有时间可以静下来学习和写博文了,为了保持着学习和分享的习惯,我准备每周抽出一部分时间为大家带来一个优秀的Android框架源码阅读后的理解系列博文. 期许:希望可 ...

最新文章

  1. c# npoi 2.5版本设置字体加粗_巨巨巨巨推荐:SCI翻译神器,大版本更新来了
  2. c字符串中包含双引号_码哥学Python,一起解密神秘的字符串密码
  3. vSpere虚拟网卡介绍
  4. SpringBoot-开发小技巧
  5. win7系统搭建tftp服务器,Win7旗舰版如何开启TFTP服务器|开启Win7旗舰版TFTP服务器的方法...
  6. Android ASCII编码转换成相对应字符
  7. matlab编程求20的阶乘和,matlab编程求20的阶乘
  8. 通过shell命名和TexturePacker工具,将.pvr.ccz批量转换为png格式
  9. YOLO输出位置信息
  10. python在化工模拟中的应用_python完成模拟博客园登陆
  11. HashMap原理以及TreeMap和Collections工具类(2022.6.10)
  12. android相机曝光度调节,手机摄影很难?这有份超全的安卓相机操作指南,专业模式一点就透...
  13. 角点检测的几种基本方法
  14. 《保健养生》---保健专家齐国力[2]
  15. 如何用 ffmpeg命令将avi视频转换为mp4
  16. Rasa课程、Rasa培训、Rasa面试系列之 Rasa对话式 AI 网络研讨会回顾
  17. linux grant命令,linux指令集
  18. Android平台TCP网络转发实现方案(redsocks+iptables+socks5)
  19. Linux /etc/shadow文件含义
  20. 豆瓣电影Top250 步骤解析

热门文章

  1. boost::hana::take_front用法的测试程序
  2. boost::hana::is_convertible用法的测试程序
  3. boost::gil模块实现cmyka转rgba的测试程序
  4. boost::filesystem模块打印文件的大小的测试程序
  5. GDCM:gdcm::IODs的测试程序
  6. GDCM:gdcm::FileSet的测试程序
  7. Boost:bind绑定的回归测试
  8. ITK:将两个图像加在一起
  9. DCMTK:读取DICOM图像,添加一个Curve并将其写回
  10. VTK:Utilities之3DArray