ng2 学习笔记(三)依赖注入与服务

前两篇文章简单介绍了ng2的一些基础用法,基本和ng1的使用风格差不多,只是写法和开发方式变化比较大。

这一篇,来总结一下ng的依赖注入与服务。官方的教程上是把他分开来讲的,个人感觉放在一起比较容易理解。

同样,这篇文章适合新手阅读。好,那我们开始正文:

在ng1,也有依赖注入的概念,ng1的依赖注入方式这里就不去多叙述了,有兴趣的可以查阅一下ng1的依赖注入方式。

ng2依然有这个概念。下面举例来说明ng2里怎么使用依赖注入以及服务:

【场景】:在某个项目里面,有很多页面都用到同一个功能,这个功能是检测用户登录状态。根据sessionStorage里存在的user字段进行判断,如果存在并且值不为空,则确认用户已登录,否则提示用户登录。

【任务】:将这个通用的判断函数,注册成一个服务,在不同的地方提供随时调用。

【开始】:

  首先,在我们的项目里新建一个文件userLogService.ts来定义这个service:

// 引入注射器模块
import { Injectable } from ‘@angular/core‘;

// @Injectable()这句话的意思是告诉angular,这个class是可以被注入的,如果不写,在注入时会报错,“()”也不要忘记
@Injectable()
export class UserLogService {
    checkState(){
        // 获取user的值
        let user = window.sessionStorage.getItem(‘user‘);

        let result = user ? true : false;
        return result;
    }
}

这是一个简单而贫血的服务,我们不去管它,这个服务要怎么使用它呢?比如在首页,我们就要判断用户状态。

假设我们有一个叫index.components.ts的首页组件,你可以这样写:

import { Component } from ‘@angular/core‘;

// 引入我们自定义的服务
import { UserLogService } from ‘../service/myservice‘;

@Component({
    selector:‘di-com‘,
    // 使用providers属性将我们定义的服务注册到这个组件中
    providers: [UserLogService],
    template:`
        <div class="container-fluid">
            <div class="container">
                <h2>依赖注入 Dependence Injector实例</h2>
                <hr />
                <div *ngIf="userState">用户已登录</div>
                <div *ngIf="!userState">用户未登录</div>
            </div>
        </div>
    `
})

export class DIComponent {
    constructor(
        private userLogService: UserLogService // 声明一个变量userLogService,并将其赋值为我们注入的服务
    ){}
    // 使用this.userLogService可以调用服务里面的方法;
    userState = this.userLogService.checkState();
}

这种注入方式是将服务注册到单独组件中,有时候,多个组件都要用到,这样一个个的写起来就有点繁琐了,所以ng2还有一种注入方式:注入到module里面(应用级别的注入):

我们需要在@NgModule里注入:

@NgModule({
  ...
  providers: [
    UserLogService, 

   { provide: APP_CONFIG, useValue: HERO_DI_CONFIG }  ],  ... }) export class AppModule { }

这种方式需要一个服务提供商,没有服务提供商ng2会抛出一个错误;

至于服务提供商的知识,我还没有研究,等后续补充吧。

欢迎大家批评指正!

时间: 2025-01-18 00:34:31

ng2 学习笔记(三)依赖注入与服务的相关文章

AngularJS学习笔记之依赖注入

最近在看AngularJS权威指南,由于各种各样的原因(主要是因为我没有money,好讨厌的有木有......),于是我选择了网上下载电子版的(因为它不要钱,哈哈...),字体也蛮清晰的,总体效果还不错.但是,当我看到左上角的总页码的时候,479页....479....479....俺的小心脏被击穿了二分之一有木有啊,上半身都石化了有木有啊,那种特别想学但是看到页码又不想学的纠结的心情比和女朋友吵架了还复杂有木有啊,我平常看的电子书百位数都不大于3的好伐! 哎,原谅我吧,我应该多看几本新华字典习

Spring.Net学习笔记五(依赖注入)

谈到高级语言编程,我们就会联想到设计模式:谈到设计模式,我们就会说道怎么样解耦合.而Spring.NET的IoC容器其中的一种用途就是解耦合,其最经典的应用就是:依赖注入(Dependeny Injection)简称DI,目前DI是最优秀的解耦方式之一.下面我就来谈谈依赖注入的应用场景. 我模拟了三种不同的场景,可以一起学习使用依赖注入的重要性. 下面是应用场景的条件:人类使用工具劳动.      /**//// <summary> /// 抽象人类 /// </summary>

[学习笔记]Spring依赖注入

依赖: 典型的企业应用程序不可能由单个对象(在spring中,也可称之bean)组成,再简单的应用也是由几个对象相互配合工作的,这一章主要介绍bean的定义以及bean之间的相互协作. 依赖注入: spring中的依赖注入(Dependency injection (DI))主要有两种形式:构造器注入和setter方法注入. 构造器注入: 基于构造函数的方式有其自己的优势,它能够明确地创建出带有特定构造参数的对象,另外它对于创建一些在类中不需要经常变化的域有明显的优势.如果用setter方法来做

Yii2 学习笔记 01 -- 依赖注入在yii2中的应用

什么是依赖注入?                  依赖注入(Dependency Injection)是设计模式的一种.名字比较抽象,但是,要解决的问题却是比较明确.对于给定的应用程序,需要借助一些相对独立的组件来完成功能.一般来说,使用这些组件的过程就包含在应用程序的逻辑语句之中.问题是,当这些组件想要做成类似插件功能,以达到应用程序的业务逻辑不变就能随意的更改组件的实现的效果.这种灵活性取决于应用程序如何组装这些组件.如果说应用程序依赖于这些组件的话,依赖注入就是把这些依赖关系从应用程序的

Spring学习笔记——Spring依赖注入原理分析

我们知道Spring的依赖注入有四种方式,分别是get/set方法注入.构造器注入.静态工厂方法注入.实例工厂方法注入 下面我们先分析下这几种注入方式 1.get/set方法注入 public class SpringAction { //注入对象springDao private SpringDao springDao; //一定要写被注入对象的set方法 public void setSpringDao(SpringDao springDao) { this.springDao = spri

Unity学习笔记(4):依赖注入

Unity具体实现依赖注入包含构造函数注入.属性注入.方法注入,所谓注入相当赋值,下面一个一个来介绍 1:构造函数注入 1.1当类有多个构造函数时,可以通过InjectionConstructor特性来指定某个构造函数来解析注入对象. [InjectionConstructor] public Student(IClass _class,string name) { ToClass = _class; Name = name; } 1.2构造函数中IClass参数,如果IUnityContain

Spring.Net学习笔记(2)-依赖注入

一.开发环境 操作系统:Win10 编译器:VS2013 framework版本:.net 4.5 Spring版本:1.3.1 二.涉及程序集 Spring.Core.dll Common.Loggin.dll 三.项目结构 四.开发过程 1.新建一个接口文件 namespace SpringNetIoc.IScene { public interface IBall { void DoSport(); } } 2.新建两个实现接口IBall的具体类 namespace SpringNetIo

angular2 学习笔记 ( DI 依赖注入 )

refer : http://blog.thoughtram.io/angular/2016/09/15/angular-2-final-is-out.html ( search Dependency Injection ) 小说明 : 大致流程 : 把 providers 写入 injector, 然后通过 injector 来注入 service. 单列 : 一个 service 在一个 injector 里是单列. 查找逻辑 : injector 有父子关联, 如果子 injector 没

OpenStack 学习笔记(三):OpenStack glance服务搭建

--先决条件 1.)创建数据库 MariaDB [(none)]> CREATE DATABASE glance; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> GRANT ALL ON glance.* TO 'glance'@'%' IDENTIFIED BY 'glance'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> GRANT ALL ON glan

OpenStack 学习笔记(三):OpenStack keystone服务搭建

--先决条件 1.)创建数据库 MariaDB [(none)]> CREATE DATABASE keystone; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> GRANT ALL ON keystone.* TO 'keystone'@'%' IDENTIFIED BY 'keystone'; Query OK, 0 rows affected (0.01 sec) MariaDB [(none)]> GRANT ALL