日落夕阳 發表於 2020-5-13 21:41:00

【转载】angular 服务providers

<p>在Angular中有很多方式可以将服务类注册到注入器中:</p>
<p>@Injectable 元数据中的providedIn属性<br>@NgModule 元数据中的&nbsp;providers属性<br>@Component 元数据中的&nbsp;providers属性<br>创建一个文件名叫名&nbsp;hero.service.ts叫&nbsp;hero&nbsp;的服务<br>&nbsp;hero.service.ts</p>
<p>import { Injectable } from '@angular/core';<br> <br>@Injectable({<br>providedIn: 'root',<br>})<br>export class HeroService {<br> <br>constructor() { }<br> <br>// 新增加setName方法<br>setName(name:string):string{<br>    return `姓名:${name}`;<br>}<br> <br>}<br>1.@Injectable 元数据中的providedIn属性</p>
<p>providedIn: 'root'&nbsp;告诉 Angular在根注入器中注册这个服务,这也是使用CLI生成服务时默认的方式.<br>这种方式注册,不需要再@NgModule装饰器中写providers,而且在代码编译打包时,可以执行摇树优化,会移除所有没在应用中使用过的服务。推荐使用此种方式注册服务</p>
<p>使用providedIn的话,后面直接在项目中使用了。</p>
<p>使用:heroes.component.ts</p>
<p>import { Component, OnInit } from '@angular/core';<br>import { HeroService } from '../hero.service'<br> <br>@Component({<br>selector: 'app-heroes',<br>templateUrl: './heroes.component.html',<br>styleUrls: ['./heroes.component.css']<br>})<br>export class HeroesComponent implements OnInit {<br> <br>constructor(private heroService:HeroService) { }<br> <br>ngOnInit() {<br>    this.heroService.setName('张三');<br>}<br>}<br>2.@NgModule 元数据中的&nbsp;providers属性</p>
<p>改写&nbsp;hero.service.ts里面的@Injectable,如下</p>
<p>import { Injectable } from '@angular/core';<br> <br>@Injectable() // 删掉了 {providedIn: 'root'}<br>export class HeroService {...}<br>&nbsp;xx.module.ts , 例如app.module.ts</p>
<p>...<br> <br>@NgModule({<br>    providers: [<br>      HeroService,<br>       // { provide: HeroService, useValue: HeroService }<br>    ],<br>})<br> <br>...<br>然后就可以在使用拉,使用方法,同1&nbsp;heroes.component.ts文件</p>
<p>3.@Component 元数据中的&nbsp;providers属性</p>
<p>&nbsp;hero.service.ts里面的@Injectable,删掉&nbsp;{providedIn: 'root'},同2&nbsp;hero.service.ts文件</p>
<p>改写heroes.component.ts</p>
<p>import { Component, OnInit } from '@angular/core';<br>import { HeroService } from '../hero.service'<br> <br>@Component({<br>selector: 'app-heroes',<br>templateUrl: './heroes.component.html',<br>styleUrls: ['./heroes.component.css'],<br>providers: // 新增 providers: <br>})<br>export class HeroesComponent implements OnInit {<br> <br>constructor(private heroService:HeroService) { }<br> <br>ngOnInit() {<br>    this.heroService.setName('张三');<br>}<br>}<br>&nbsp;</p>
<p>三种用法总结:</p>
<p>@Injectable 元数据中的providedIn属性&nbsp;&nbsp;</p>
<p>//service.ts<br>@Injectable({providedIn:'root'})<br>@NgModule 元数据中的&nbsp;providers属性</p>
<p>// service.ts<br>@Injectable() <br> <br>//module.ts<br>@NgModule({<br>    providers: <br>})<br>@Component 元数据中的&nbsp;providers属性</p>
<p>// service.ts<br>@Injectable() <br> <br>// component.ts<br>@Component({<br>...<br>selector: 'app-heroes',<br>providers: [ HeroService ]<br>})</p>
<p>————————————————<br>版权声明:本文为CSDN博主「元气小仙女」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。<br>原文链接:https://blog.csdn.net/sllailcp/article/details/102548144</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>tips:</p>
<p>  NgModule的主要属性如下:</p>
<p>declarations:模块内部Components/Directives/Pipes的列表,声明一下这个模块内部成员<br>providers:指定应用程序的根级别需要使用的service。(Angular2中没有模块级别的service,所有在NgModule中声明的Provider都是注册在根级别的Dependency Injector中)<br>imports:导入其他module,其它module暴露的出的Components、Directives、Pipes等可以在本module的组件中被使用。比如导入CommonModule后就可以使用NgIf、NgFor等指令。<br>exports:用来控制将哪些内部成员暴露给外部使用。导入一个module并不意味着会自动导入这个module内部导入的module所暴露出的公共成员。除非导入的这个module把它内部导入的module写到exports中。<br>bootstrap:通常是app启动的根组件,一般只有一个component。bootstrap中的组件会自动被放入到entryComponents中。<br>entryCompoenents: 不会再模板中被引用到的组件。这个属性一般情况下只有ng自己使用,一般是bootstrap组件或者路由组件,ng会自动把bootstrap、路由组件放入其中。&nbsp;除非不通过路由动态将component加入到dom中,否则不会用到这个属性。<br>  每个Angular2的应用都至少有一个模块即跟模块。<br>————————————————<br>版权声明:本文为CSDN博主「just run 0」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。<br>原文链接:https://blog.csdn.net/wyb_gg/java/article/details/72731373</p><br><br>
来源:https://www.cnblogs.com/maruko/p/12885081.html
頁: [1]
查看完整版本: 【转载】angular 服务providers