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. while(~scanf(..))为什么可以这样写

    因为读到文件的结束符时,scanf返回值是EOF,也就是-1,而~(-1)的作用就是对-1的按位取反. 在计算机中,数字按补码存储,正数的补码和原码一样,负数的补码是其反码+1,反码也就是符号位仍为1 ...

  2. python学习日记(函数基础)

    修改文件(原理)--回顾 #修改文件(原理) with open('name','r',encoding='utf-8') as f,\ open('password','w+',encoding=' ...

  3. Linux 检查端口gps命令

    由于是游戏业务,环境主要是Nginx+Tomcat+Java Program gps脚本环境以及效果图如下: #!/bin/bash function Printf (){ == ];then pri ...

  4. 09 Zabbix4.0系统clone、mass update使用

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 09 Zabbix4.0系统clone.mass update使用 1. clone使用: clo ...

  5. 【bfs】拯救少林神棍(poj1011)

    Description 乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过50个长度单位.然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度.请你 ...

  6. 【php】php目录路径函数系列

    在写框架和项目时候我们经常要获取绝对路径,php有内置函数realpath(),  也可以写个函数来实现这个功能 function getAbsolutePath($path) { $path = s ...

  7. ecplise 修改编码

    1.修改eclipse默认工作空间编码方式 window->preferences->general->workspace 2.修改工程编码方式 项目右键->propertie ...

  8. (转)java 序列化ID的作用

    序列化ID的作用: 其实,这个序列化ID起着关键的作用,它决定着是否能够成功反序列化!简单来说,java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的.在进行反序 ...

  9. python3+django2 开发易语言网络验证(下)

    第六步:网络验证服务器端项目上线部署 功夫不负有心人,终于部署成功啦! 前期准备: 项目名:netauth 系统:百度云服务器下的Ubuntu16.4 软件:xshell(无论如何想办法用这个跟服务器 ...

  10. 为什么在Python里推荐使用多进程而不是多线程?(为什么python多线程无法增加CPU使用率?)

    最近在看Python的多线程,经常我们会听到老手说:“Python下多线程是鸡肋,推荐使用多进程!”,但是为什么这么说呢? 要知其然,更要知其所以然.所以有了下面的深入研究: 首先强调背景:     ...