angular中的服务
angular中的服务
angular中的服务相当于一个状态管理,可以将数据放在服务里面进行获取以及编辑。
服务的安装命令:
ng g service count
安装好后,会在服务的ts文件中引入一个Injectable模块,这是一个服务装饰器,可以通过@Injectable()将一个类装饰成一个服务。
Injectable分为全局和局部:
局部创建:
@Injectable({
provideIn:root;
})
provideIn有两个值:
root:表示只会在跟节点创建一个实例。
null:表示会创建多个一样的实例。
全局创建:
@Injectable()
全局创建的服务需要在app的模块文件中引入创建的服务。
import {CountService} from "./count/count.service"
并在providers中挂载:
三种挂载方法:
第一种方法
providers: [
CountService
]
这样挂载时把你创建的服务完全挂载上去
第二种方法
providers: [
{provide:CountService,useClass:NewCountService}//使用新的服务代替旧的服务
]
这种方法是用新创建的服务替换旧创建的服务
第三种方法
providers: [
{provide:CountService,useValue:{getCount(){return "只改服务中的一个方法"}}}//可以通过这个改掉服务中的一个方法
]
这种方法只改变服务中指定的方法
组件使用服务:
如果是局部创建的服务,组件在使用时需要先将服务引入。
import {CountService} from "../count/count.service";
创建实例有两种方法:
普通创建实例:
constructor() {
//普通的做法
var cs=new CountService();
console.log(cs.getCount());
}
依赖注入
constructor(cs:CountService) { //依赖注入:就是一种创建实例的方式,通过程序创建。可以是全局的,也可以是局部的
console.log(cs.getCount())
}
依赖注入就是通过程序将实例创建出来,我们只需要去使用它就可以啦。
可以将创建的实例作为组件中的属性:
constructor(private cs:CountService) {
console.log(this.cs.getCount())
}
将实例作为组件中的属性,就是在引入的时候将组件设置为私有属性
服务小案例:计数
header.component.html:
<p>
{{count}}
</p>
header.component.ts:
export class HeaderComponent implements OnInit {
count;
constructor(private cs:CountService) {
}
ngOnInit() {
}
ngAfterContentChecked(){
this.count=this.cs.count;
}
}
服务代码:
count.service.ts:
export class CountService {
count=5;
constructor() { }
setCount(payload){
return this.count+=payload;
}
}
增加和减小按钮
add-btn.component.html:
<p>
<button (click)="handleChange()" >+</button>
</p>
add-btn.component.ts:
export class AddBtnComponent implements OnInit {
constructor(private cs:CountService) {
}
ngOnInit() {
}
handleChange(){
this.cs.setCount(1);
}
}
减小按钮和增加一样的。
angular中的服务的更多相关文章
- Angular中的服务的使用
定义公共的方法,使得方法在组件之间共享调用 1. 创建服务命令 ng g service modbus-service # 创建服务到指定目录下 ng g service services/modbu ...
- angular中的服务和持久化实现
1.创建服务: ng g service my-new-service 创建到指定目录下面 ng g service services/storage 2.app.module.ts 里面引入创建的服 ...
- angular源码分析:angular中的依赖注入式如何实现的
一.准备 angular的源码一份,我这里使用的是v1.4.7.源码的获取,请参考我另一篇博文:angular源码分析:angular源代码的获取与编译环境安装 二.什么是依赖注入 据我所知,依赖注入 ...
- 在 Angular 中实现搜索关键字高亮
在 Angular 中,我们不应该试图直接修改 DOM 的内容,当需要更新 DOM 内容的时候,应该修改的其实是我们的数据模型,也就是 $scope 中的数据,Angular 会帮助我们将修改之后的数 ...
- Angular JS 中的服务注册方法
在Angular JS中创建服务的几种方法 factory() service() constant() value() provider() factory(name,fn(){}) 该服务为单例的 ...
- Angular中怎样创建service服务来实现组件之间调用公共方法
Angular组件之间不能互相调用方法,但是可以通过创建服务来实现公共方法的调用. 实现 创建服务命令 ng g service 服务路径/服务名 比如这里在app/services目录下创建stor ...
- Angular中ngCookies模块介绍
1.Cookie介绍 Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie.内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短 ...
- Deferred在jQuery和Angular中的使用与简单实现
Deferred在jQuery和Angular中的使用与简单实现 Deferred是在jQuery1.5版本中加入的,并且jQuery使用它完全重写了AJax,以前也只是偶尔使用.但是上次在使用Ang ...
- angular源码分析:angular中脏活累活的承担者之$interpolate
一.首先抛出两个问题 问题一:在angular中我们绑定数据最基本的方式是用两个大括号将$scope的变量包裹起来,那么如果想将大括号换成其他什么符号,比如换成[{与}],可不可以呢,如果可以在哪里配 ...
随机推荐
- python3,打印一年的某一天是一年的第几天
year = int(input('year:')) month = int(input('month:')) day = int(input('day:')) months = (0,31,59,9 ...
- MT【250】距离0-7
是否存在一个正方体,它的8个顶点到某一个平面的距离恰好为$0,1,2,3,4,5,6,7$ ?若存在指出正方体与相应的平面的位置关系.不存在说明理由. 分析:设平面$\alpha$的单位法向量为$\o ...
- ACM中的fread读入
fread可以加快读入速度,尤其是读特大的二进制文件. #include <cctype> typedef long long LL; char buf[100000],*p1=buf,* ...
- 【Tsinsen A1039】【bzoj2638】黑白染色 (BFS树)
Descroption 原题链接 你有一个\(n*m\)的矩形,一开始所有格子都是白色,然后给出一个目标状态的矩形,有的地方是白色,有的地方是黑色,你每次可以选择一个连通块(四连通块,且不要求颜色一样 ...
- mysql truncate 、delete与drop区别
相同点: 1.truncate和不带where子句的delete.以及drop都会删除表内的数据. 2.drop.truncate都是DDL语句(数据定义语言),执行后会自动提交. 不同点: trun ...
- DHU--1247 Hat’s Words && HiHocder--1014 Trie树 (字典树模版题)
题目链接 DHU--1247 Hat’s Words HiHocder--1014 Trie树 两个一个递归方式一个非递归 HiHocoder #include<bits/stdc++.h> ...
- A1021. Deepest Root
A graph which is connected and acyclic can be considered a tree. The height of the tree depends on t ...
- [Splay][学习笔记]
胡扯 因为先学习的treap,而splay与treap中有许多共性,所以会有很多地方不会讲的很细致.关于treap和平衡树可以参考这篇博客 关于splay splay,又叫伸展树,是一种二叉排序树,它 ...
- 扩展方法、委托和Lambda
举例演化Lambda string[] names ={"Burke", "Connor", "Frank", "Everett& ...
- 第三篇-ubuntu18.04下截图快捷键
ubuntu自带的截图工具感觉能够满足基本的截图功能,可以不必安装另外的截图软件. 一般用到的截图类型有三种:全屏.当前活动窗口.自定义区域,其中自定义区域截图是最灵活也是我们用的最多的方式.在ubu ...