一、实现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中,如下图所示:

初探AngularJs框架(三)的更多相关文章

  1. 初探AngularJs框架(二)

    一.创建Components组件 直接使用AngularCLI即可很方便的创建component组件,使用如下指令: ng g component components/news 这样就会在compo ...

  2. 初探AngularJs框架(一)

    一.需要准备的环境 Nodejs:https://nodejs.org/en/download/ Python:https://www.python.org/downloads/release/pyt ...

  3. 初探JavaScript(三)——JS带我"碰壁"带我飞

    已经写了两篇关于小白的JavaScript之行,不可否认,每一种语言都有其精华与糟粕之处,来不及细细体味其精华奥妙,也没法对其评头论足,只能先了解,后深入.到目前为止已经看完<JavaScrip ...

  4. 初探接口测试框架--python系列4

    点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...

  5. AngularJS框架研究(一)

    和几年前相比,现在的Javascript开发方式有了翻天覆地的变化,一些极具创意的开发工具的出现,让前端开发更加成熟,Angular框架就是一个例子.最近在看Angular的源代码,发现并不是件容易的 ...

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

    现在就开始使用AngularJS的三个重要原因 在线演示1 本地下载 如果你不熟悉什么是Angular.js的话,小编我强烈推荐你阅读 Javascript教程:AngularJS的五个超酷特性.简单 ...

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

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

  8. 初探接口测试框架--python系列7

    点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...

  9. 初探接口测试框架--python系列2

    点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...

随机推荐

  1. 【Mock】【接口测试】【面试】mock-server 环境搭建—加分项!

    mock-server 环境搭建 前言 mock 除了用在单元测试过程中,还有一个用途,当前端开发在开发页面的需要服务端提供 API 接口 此时服务端没开发完成,或者说没搭建测试环境,这个时候前端开发 ...

  2. FreeMarker详解

    什么是 FreeMarker? FreeMarker 是一款 模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的通用工具. 它不是面向最终用 ...

  3. aws的安全组

    aws有安全组来控制进入和去除的规则. 入站:就是外网访问你出站:就是你访问外网用户可以创建入站和出站规则,从而阻挡或者允许特定程序或者端口进行连接;用户可以将规则应用于一组程序.端口或者服务,也可以 ...

  4. python-面向对象-02_类和对象

    类和对象 目标 类和对象的概念 类和对象的关系 类的设计 01. 类和对象的概念 类 和 对象 是 面向对象编程的 两个 核心概念 1.1 类 类 是对一群具有 相同 特征 或者 行为 的事物的一个统 ...

  5. oracle-安装-init.sh

    !#/bin/bashgroupadd -g 1001 oinstallgroupadd -g 1002 dbagroupadd -g 1003 opergroupadd -g 1004 asmadm ...

  6. HyperlinkedIdentityField

    1.简介 其实就是创建一个链接,把查询到对象放到链接上,点链接可以查看.实际上用的很少. 2. views代码 查找的是一个对象的所有数据,link只是放在这个对象其中一个字段上的数据. from d ...

  7. golang配置

    配置使用yaml,使用了github上一个configor的库.理由如下: 1. 支持多种格式 2. ORM,自动给变量赋值,不用写太多的代码 3. 但是他支持shell env配置,我怕与运行的环境 ...

  8. Amazon RDS 上的 Microsoft SQL Server » 导入和导出 SQL Server 数据库

    导入和导出 SQL Server 数据库 Amazon RDS 支持使用完整备份文件 (.bak 文件) 对 Microsoft SQL Server 数据库进行本机备份和还原.您可以在单个便携式文件 ...

  9. python 参数解析ArgumentParser

    #!/usr/bin/env python #coding:utf-8 from argparse import ArgumentParser #--------------------------- ...

  10. unity3d-游戏实战突出重围,第二天 制作血条

    using UnityEngine; using System.Collections; public class xt : MonoBehaviour { //红色血条 public Texture ...