Angular4.x 中的服务


写下前面

学习angular4.x中的服务需要借助 ToDoList 项目来做,项目代码在上篇博客中讲到。

https://www.cnblogs.com/wjw1014/p/10346885.html#_label7

什么是 Angular4.x 服务

  

把多个组件共同的功能编写为一个服务,当组件需要使用公共的功能时,只需要把服务引用,就可以使用服务中的属性和方法。

Angular CLI 创建服务

https://github.com/angular/angular-cli

  

创建服务文件夹

为了方便项目的管理和维护,我们单独创建一个 services 文件夹用于存放我们创建的服务(类似于之前存放自定义组件的components文件夹)。

  

使用命令创建服务

ng g service services/storage

  

  

  创建出了服务。

app.module.ts 里面引入创建的服务

app.module.ts 里面引入创建的服务

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

NgModule 里面的 providers 里面依赖注入服务

  

使用的页面引入服务,注册服务

使用页面注册服务

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

  

使用页面使用服务

方法一:(官方不推荐使用)

  public storage = new StorageService(); /**可以引入和使用服务 */

  

方法二:(官方推荐)

  // private storage:StorageService 依赖注入服务
constructor(private storage:StorageService) {
this.username = '';
}

  

ToDoList 项目优化,实现刷新保留数据

storage.service.ts 文件

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

@Injectable({
providedIn: 'root'
})
export class StorageService { constructor() { //构造函数 } setItem(key,value){
localStorage.setItem(key,JSON.stringify(value))
} getItem(key){
return JSON.parse(localStorage.getItem(key))
} removeItem(key){
localStorage.removeItem(key);
} }

  

todolist.component.ts 文件

import { Component, OnInit } from '@angular/core';

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

@Component({
selector: 'app-todolist',
templateUrl: './todolist.component.html',
styleUrls: ['./todolist.component.css']
})
export class TodolistComponent implements OnInit { public username: any; public list = []; // public storage = new StorageService(); /**可以引入和使用服务 */ // private storage:StorageService 依赖注入服务
constructor(private storage: StorageService) {
this.username = '';
} ngOnInit() {
// // 每次刷新获取 todolist
var todolist = this.storage.getItem('todolist')
if(todolist){ // 判断是不是空
this.list = todolist
}
} addData(e) { // 添加数据
// 检测是否按回车
if (e.keyCode == 13) {
var obj = { /***每次增加的一个对象数据 */
username: this.username,
status: 1
}
// 1. 从storage中获取数据,todolist的数据
var todolist = this.storage.getItem('todolist')
// 2. 如果有数据,拿到这个数据然后把新数据和这个数据拼接,重新写入。
if (todolist) {
todolist.push(obj)
this.storage.setItem('todolist', todolist)
} else {
// 3. 如果没有数据,直接给storage写入数据
var arr = [];
arr.push(obj)
this.storage.setItem('todolist', arr)
}
this.list.push(obj)
this.username = ''
}
} deleteData(key) { // 删除数据 传进索引值
this.list.splice(key, 1) /**删除数组的数据:从key索引开始删除,删除一个数据 */
this.storage.setItem('todolist',this.list)
} changeData(key,status) { // 改变状态
this.list[key].status = status
this.storage.setItem('todolist',this.list)
} }

todolist.component.html 文件

<br>
<br> <input type="text" [(ngModel)]='username' (keydown)='addData($event)'>
<hr> <h2>正在进行</h2>
<ul>
<li *ngFor="let item of list;let i = index;" [hidden]="item.status==2">
<button (click)="changeData(i,2)">改变数据</button> {{item.username}} --------- <button (click)="deleteData(i)">删除</button>
</li>
</ul> <h2>已经完成</h2>
<ul>
<li *ngFor="let item of list;let i = index;" [hidden]="item.status==1">
<button (click)="changeData(i,1)">改变数据</button> {{item.username}} --------- <button (click)="deleteData(i)">删除</button>
</li>
</ul>

Angular4.x 中的服务的更多相关文章

  1. (转)ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法

    早上同事用PL/SQL连接虚拟机中的Oracle数据库,发现又报了"ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务"错误,帮其解决后,发现很多人遇到过这样的问 ...

  2. 如何在Windows 2003+IIS6的环境下找回应用程序池(application pool)中的服务账号密码

    上一篇文章说了说如何在Win2008+iis7中取出SharePoint管理账号密码的方法. 整个过程简单的讲,就是通过使用要找回密码的账号用来在SharePoint中创建一个临时的Web Appli ...

  3. 关于Oracle报“ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务”错误

    关于Oracle报“ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务”错误原因:listener.ora中没有指定监听服务器名. 如下是解决思路: 尝试1.通过重启服务的方式启动数 ...

  4. 避免在ASP.NET Core中使用服务定位器模式

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:服务定位器(Service Locator)作为一种反模式,一般情况下应该避免使用,在 ...

  5. Android中Service(服务)详解

    http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...

  6. 跟我一起学WCF(11)——WCF中队列服务详解

    一.引言 在前面的WCF服务中,它都要求服务与客户端两端都必须启动并且运行,从而实现彼此间的交互.然而,还有相当多的情况希望一个面向服务的应用中拥有离线交互的能力.WCF通过服务队列的方法来支持客户端 ...

  7. ASP.NET 5系列教程 (四):向视图中添加服务和发布应用到公有云

    向视图中添加服务 现在,ASP.NET MVC 6 支持注入类到视图中,和VC类不同的是,对类是公开的.非嵌套或非抽象并没有限制.在这个例子中,我们创建了一个简单的类,用于统计代办事件.已完成事件和平 ...

  8. MYSQL启动报1067错误,系统日志中是“服务 mysql 意外停止” Mysql日志中则是:“Plugin \'FEDERATED\' is disabled”

    MYSQL启动报1067错误,系统日志中是"服务 mysql 意外停止" Mysql日志中则是:"Plugin \'FEDERATED\' is disabled&quo ...

  9. [老老实实学WCF] 第三篇 在IIS中寄存服务

    老老实实学WCF 第三篇 在IIS中寄宿服务 通过前两篇的学习,我们了解了如何搭建一个最简单的WCF通信模型,包括定义和实现服务协定.配置服务.寄宿服务.通过添加服务引用的方式配置客户端并访问服务.我 ...

随机推荐

  1. 命令行方式调用winrar对文件夹进行zip压缩示例代码

    调用winRAR进行压缩 using System; using System.Collections.Generic; using System.Linq; using System.Text; u ...

  2. Linux系统查看日志信息总结

    命令: cat tail -f #系统日志文件存放路径: /var/log/message #系统启动后的信息和错误日志 /var/log/secure #与安全相关的日志信息 /var/log/ma ...

  3. iOS 设计模式-Block实现代理的逻辑

    在A页面,点击跳转到B页面,B页面操作完,回到A页面,并刷新A页面的内容.典型的例子,就是在一个列表里,点击新增,跳到新增页面,新增完,把数据传回给列表页,并刷新列表页里的内容. 这个,我平时一般是通 ...

  4. Unity3d打包发布Android程序

    unty3d这个款游戏引擎的强大之处就是编写一个程序.可以多平台发布.我的是安卓手机.所以此文介绍下发布安卓的过程 发布安卓前. 1:需要配置java环境.这里之前写过一篇java的配置  http: ...

  5. DataGridView常用属性和方法

    DataGridView常用属性: 只读属性设定    datagridview.ReadOnly = True 行自动追加    datagridview.AllowUserToAddRows = ...

  6. HTML布局规范

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  7. C#7.0新特性(VS2017可用)

    分享一下其实2016年12月就已经公布了的C#7.0的新特性吧,虽然很早就出来了,但咱这IDE不支持啊.. 不过在昨天的VS2017中已经完美可以支持使用了. E文好的,移步官方介绍地址:https: ...

  8. react修改app.js添加中文内容后中文部分乱码解决

    [问题]:配置完react后修改app.js内容时添加中文出现如下乱码的中文. [A解决]文档——文本编码——转换文本编码,在弹出窗口修改,确定,搞定 [B解决]首先在EditPlus内:工具——首选 ...

  9. MQ(转)

    1. 到底什么时候该使用MQ? 1). 典型场景一:数据驱动的任务依赖 采用MQ的优点是: a. 不需要预留buffer,上游任务执行完,下游任务总会在第一时间被执行 b. 依赖多个任务,被多个任务依 ...

  10. bzoj4443 小凸玩矩阵

    题目链接 二分+最大check #include<algorithm> #include<iostream> #include<cstdlib> #include& ...