angular注入方法providers

在Angular中有很多方式可以将服务类注册到注入器中:

@Injectable 元数据中的providedIn属性
@NgModule 元数据中的 providers属性
@Component 元数据中的 providers属性
创建一个文件名叫名 hero.service.ts叫 hero 的服务
 hero.service.ts

import { Injectable } from '@angular/core';@Injectable({providedIn: 'root',
})
export class HeroService {constructor() { }// 新增加setName方法setName(name:string):string{return `姓名:${name}`;}}


1.@Injectable 元数据中的providedIn属性

providedIn: 'root' 告诉 Angular在根注入器中注册这个服务,这也是使用CLI生成服务时默认的方式.
这种方式注册,不需要再@NgModule装饰器中写providers,而且在代码编译打包时,可以执行摇树优化,会移除所有没在应用中使用过的服务。推荐使用此种方式注册服务

使用providedIn的话,后面直接在项目中使用了。

使用:heroes.component.ts

import { Component, OnInit } from '@angular/core';
import { HeroService } from '../hero.service'@Component({selector: 'app-heroes',templateUrl: './heroes.component.html',styleUrls: ['./heroes.component.css']
})
export class HeroesComponent implements OnInit {constructor(private heroService:HeroService) { }ngOnInit() {this.heroService.setName('张三');}
}


2.@NgModule 元数据中的 providers属性

改写 hero.service.ts里面的@Injectable,如下

import { Injectable } from '@angular/core';@Injectable() // 删掉了 {providedIn: 'root'}
export class HeroService {...}


 xx.module.ts , 例如app.module.ts

...@NgModule({providers: [HeroService,// { provide: HeroService, useValue: HeroService }],
})...


然后就可以在使用拉,使用方法,同1 heroes.component.ts文件

3.@Component 元数据中的 providers属性

 hero.service.ts里面的@Injectable,删掉 {providedIn: 'root'},同2 hero.service.ts文件

改写heroes.component.ts

import { Component, OnInit } from '@angular/core';
import { HeroService } from '../hero.service'@Component({selector: 'app-heroes',templateUrl: './heroes.component.html',styleUrls: ['./heroes.component.css'],providers: [HeroService] // 新增 providers: [HeroService]
})
export class HeroesComponent implements OnInit {constructor(private heroService:HeroService) { }ngOnInit() {this.heroService.setName('张三');}
}


 

三种用法总结:

@Injectable 元数据中的providedIn属性  

//service.ts
@Injectable({providedIn:'root'})//component.ts
constructor(private heroService:HeroService) { }


@NgModule 元数据中的 providers属性

// service.ts
@Injectable() //module.ts
@NgModule({providers: [HeroService ]
})


@Component 元数据中的 providers属性

// service.ts
@Injectable() // component.ts
@Component({...selector: 'app-heroes',providers: [ HeroService ]
})


原文链接:https://blog.csdn.net/sllailcp/article/details/102548144

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/39062.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言,结构体,结构体大小,

1、结构体: 用于存储不同数据类型的多个相关变量,从而形成一个具有独立性的组合数据类型。 结构体的声明: struct 结构体类型名{ 数据类型 成员1; 数据类型 成员2; 数据类型 成员3; ……… }&#xff1…

转行软件测试四个月学习,第一次面试经过分享

我是去年上半年从销售行业转行到测试的,从销售公司辞职之后选择去培训班培训软件测试,经历了四个月左右的培训,在培训班结课前两周就开始投简历了,在结课的时候顺利拿到了offer。在新的公司从事软件测试工作已经将近半年有余&…

深信服数据中心管理系统 XXE漏洞复现

0x01 产品简介 深信服数据中心管理系统DC为AC的外置数据中心,主要用于海量日志数据的异地扩展备份管理,多条件组合的高效查询,统计和趋势报表生成,设备运行状态监控等功能。 0x02 漏洞概述 深信服数据中心管理系统DC存在XML外部实…

WPS-0DAY-20230809的分析和利用复现

WPS-0DAY-20230809的分析和初步复现 一、漏洞学习1、本地复现环境过程 2、代码解析1.htmlexp.py 3、通过修改shellcode拿shell曲折的学习msf生成sc 二、疑点1、问题2、我的测试测试方法测试结果 一、漏洞学习 强调:以下内容仅供学习和测试,一切行为均在…

Keil开发STM32单片机项目的三种方式

STM32单片机相比51单片机,内部结构复杂很多,因此直接对底层寄存器编码,相对复杂,这个需要我们了解芯片手册,对于复杂项目,这些操作可能需要反复编写,因此出现了标准库的方式,对寄存器…

ES中倒排索引机制

在ES的倒排索引机制中有四个重要的名词:Term、Term Dictionary、Term Index、Posting List。 Term(词条):词条是索引里面最小的存储和查询单元。一段文本经过分析器分析以后就会输出一串词条。一般来说英文语境中词条是一个单词&a…

日期时间常用功能和函数

1 time 模块 time 模块提供了很多与时间相关的类和函数,下面我们介绍一些常用的。 1.1 struct_time 类 time 模块的 struct_time 类代表一个时间对象,可以通过索引和属性名访问值。对应关系如下所示: 索引属性值0tm_year(年&a…

Docker容器与虚拟化技术:Docker资源控制、数据管理

目录 一、理论 1.资源控制 2.Docker数据管理 二、实验 1.Docker资源控制 2.Docker数据管理 三、问题 1.docker容器故障导致大量日志集满,造成磁盘空间满 2、当日志占满之后如何处理 四、总结 一、理论 1.资源控制 (1) CPU 资源控制 cgroups&#xff0…

Java Vue Uniapp MES生产执行管理系统

本MES系统是一款B/S结构、通用的生产执行管理系统,功能强大! 系统基于多年离散智造行业的业务经验组建,主要目的是为国内离散制造业的中小企业提供一个专业化、通用性、低成本的MES系统解决方案。 联系作者获取

Linux(进程控制)

进程控制 进程创建fork函数初识fork函数返回值写时拷贝fork常规用法fork调用失败的原因 进程终止进程退出码进程常见退出方法 进程等待进程等待必要性获取子进程status进程等待的方法 阻塞等待与非阻塞等待阻塞等待非阻塞等待 进程替换替换原理替换函数函数解释命名理解 做一个…

re学习(32)【绿城杯2021】babyvxworks(浅谈花指令)

链接:https://pan.baidu.com/s/1msA5EY_7hoYGBEema7nWwA 提取码:b9xf wp:首先找不到main函数,然后寻找特殊字符串, 交叉引用 反汇编 主函数在sub_3D9当中,但是IDA分析错了 分析错误后,删除函数 创建函数 操…

【Linux】多线程1——线程概念与线程控制

文章目录 1. 线程概念什么是线程Linux中的线程线程的优点线程的缺点线程的独立资源和共享资源 2. 线程控制Linux的pthread库用户级线程 📝 个人主页 :超人不会飞)📑 本文收录专栏:《Linux》💭 如果本文对您有帮助&…

无脑入门pytorch系列(三)—— nn.Linear

本系列教程适用于没有任何pytorch的同学(简单的python语法还是要的),从代码的表层出发挖掘代码的深层含义,理解具体的意思和内涵。pytorch的很多函数看着非常简单,但是其中包含了很多内容,不了解其中的意思…

SpringBoot复习:(46)全局的bean懒加载是怎么实现的?

在application.properties中配置: spring.main.lazy-initializationtrue在运行SpringApplication的run方法时,代码如下: 其中调用了prepareContext,prepareContext代码如下: 当在配置文件中配置了spring.main.lazy-initializat…

JavaScript实现在线Excel的附件上传与下载

摘要:本文由葡萄城技术团队于CSDN原创并首发。转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具、解决方案和服务,赋能开发者。 前言 在本地使用Excel时,经常会有需要在Excel中添加一些附件文件的需求&am…

Clickhouse基于文件复制写入

背景 目前clickhouse社区对于数据的写入主要基于文件本地表、分布式表方式为主,但缺乏大批量快速写入场景下的数据写入方式,本文提供了一种基于clickhouse local 客户端工具分布式处理hdfs数据表文件,并将clickhouse以文件复制的方式完成写入…

解决并发冲突:Java实现MySQL数据锁定策略

在并发环境下,多个线程同时对MySQL数据库进行读写操作可能会导致数据冲突和不一致的问题。为了解决这些并发冲突,我们可以采用数据锁定策略来保证数据的一致性和完整性。下面将介绍如何使用Java实现MySQL数据锁定策略,以及相关的注意事项和最…

开源低代码平台Openblocks

网友 HankMeng 想看低代码工具,正好手上有一个; 什么是 Openblocks ? Openblocks 是一个开发人员友好的开源低代码平台,可在几分钟内构建内部应用程序。 传统上,构建内部应用程序需要复杂的前端和后端交互,…

如何保证微信小游戏存档不丢失?

引言 微信小游戏的兴起为玩家提供了一个轻松便捷的娱乐方式,然而,存档丢失问题一直以来都是开发者和玩家关注的焦点。为了确保玩家的游戏体验和投入能够得到充分的保障,开发团队需要采取一系列方法来保障微信小游戏存档不丢失。本文将介绍一…

学习笔记十五:基于YUM文件运行POD应用

基于YUM文件运行POD应用 通过资源清单文件创建第一个Pod更新资源清单文件查看pod是否创建成功查看pod的ip和pod调度到哪个节点上假如pod里有多个容器,进入到pod里的指定容器查看pod详细信息查看pod具有哪些标签:删除pod通过kubectl run创建Pod Pod资源清…