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中的服务的更多相关文章

  1. Angular中的服务的使用

    定义公共的方法,使得方法在组件之间共享调用 1. 创建服务命令 ng g service modbus-service # 创建服务到指定目录下 ng g service services/modbu ...

  2. angular中的服务和持久化实现

    1.创建服务: ng g service my-new-service 创建到指定目录下面 ng g service services/storage 2.app.module.ts 里面引入创建的服 ...

  3. angular源码分析:angular中的依赖注入式如何实现的

    一.准备 angular的源码一份,我这里使用的是v1.4.7.源码的获取,请参考我另一篇博文:angular源码分析:angular源代码的获取与编译环境安装 二.什么是依赖注入 据我所知,依赖注入 ...

  4. 在 Angular 中实现搜索关键字高亮

    在 Angular 中,我们不应该试图直接修改 DOM 的内容,当需要更新 DOM 内容的时候,应该修改的其实是我们的数据模型,也就是 $scope 中的数据,Angular 会帮助我们将修改之后的数 ...

  5. Angular JS 中的服务注册方法

    在Angular JS中创建服务的几种方法 factory() service() constant() value() provider() factory(name,fn(){}) 该服务为单例的 ...

  6. Angular中怎样创建service服务来实现组件之间调用公共方法

    Angular组件之间不能互相调用方法,但是可以通过创建服务来实现公共方法的调用. 实现 创建服务命令 ng g service 服务路径/服务名 比如这里在app/services目录下创建stor ...

  7. Angular中ngCookies模块介绍

    1.Cookie介绍 Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie.内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短 ...

  8. Deferred在jQuery和Angular中的使用与简单实现

    Deferred在jQuery和Angular中的使用与简单实现 Deferred是在jQuery1.5版本中加入的,并且jQuery使用它完全重写了AJax,以前也只是偶尔使用.但是上次在使用Ang ...

  9. angular源码分析:angular中脏活累活的承担者之$interpolate

    一.首先抛出两个问题 问题一:在angular中我们绑定数据最基本的方式是用两个大括号将$scope的变量包裹起来,那么如果想将大括号换成其他什么符号,比如换成[{与}],可不可以呢,如果可以在哪里配 ...

随机推荐

  1. 【XSY2535】整数 NTT

    题目描述 问有多少个满足以下要求的\(k\)进制数: 1.每个数字出现的次数不超过\(n\) 2.\(0\)没有出现过 3.若\(g_{i,j}=0\),则\(i\)不能出现恰好\(j\)次. 两次询 ...

  2. bzoj 3673 可持久化并查集 by zky

    Description n个集合 m个操作操作:1 a b 合并a,b所在集合2 k 回到第k次操作之后的状态(查询算作操作)3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0<n ...

  3. bzoj 2957 楼房重建 (线段树+思路)

    链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2957 思路: 用分块可以很简单的过掉,但是这道题也可以用线段树写. 分类讨论左区间最大值对 ...

  4. Educational Codeforces Round 33 (Rated for Div. 2) F. Subtree Minimum Query(主席树合并)

    题意 给定一棵 \(n\) 个点的带点权树,以 \(1\) 为根, \(m\) 次询问,每次询问给出两个值 \(p, k\) ,求以下值: \(p\) 的子树中距离 \(p \le k\) 的所有点权 ...

  5. 聊聊GarbageCollectionNotificationInfo

    序本文主要研究一下GarbageCollectionNotificationInfo CompositeDatajava.management/javax/management/openmbean/C ...

  6. linux添加lvm磁盘大小,命令行创建swap

    添加硬盘 添加一块硬盘. 重新扫描硬盘 echo "- - -" > /sys/class/scsi_host/host0/scan echo "- - -&quo ...

  7. [FJOI2016]神秘数(脑洞+可持久化)

    题目描述 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13}, 1 = 1 2 = 1+1 3 = 1+1+1 4 = 4 5 = 4+1 6 = ...

  8. pandas 轮询dataframe

    轮询有一个挺好的方式,df.iterrows() 这个函数同时返回 索引和行对象的生成器可以直接进行遍历. import pandas as pd df = pd.read_csv("dru ...

  9. Android 新架构组件 -- WorkManager

    Android WorkManager compile "android.arch.work:work-runtime:1.0.0-alpha02" 继承Worker类并实现doW ...

  10. Dubbo x Cloud Native 服务架构长文总结(很全)

    Dubbo x Cloud Native 服务架构长文总结(很全) mercyblitz SpringForAll社区 3天前 分享简介 Cloud Native 应用架构随着云技术的发展受到业界特别 ...