angular学习(三)
Angular 中的依赖注入
1.1依赖
当一个类需要另一个类协作来完成工作的时候就产生了依赖。比如我们在AccountController这个控制器需要完成和用户相关的注册、登录 等事情。其中的登录我们由EF结合Idnetity来完成,所以我们封装了一个EFLoginService。这里AccountController就有一个ILoginService的依赖。简单来说就是一个类需要别的类的帮助,就是有了依赖,别的类将此类需要的东西给他就是注入,步骤:
1.首先新建一个Service层
ng g service heroes/hero
import { Component } from '@angular/core';
import { HEROES } from './mock-heroes';
@Component({
selector: 'app-hero-list',
template: `
<div *ngFor="let hero of heroes">
{{hero.id}} - {{hero.name}}
</div>
`
})
export class HeroListComponent {
heroes = HEROES;
}
import { Component } from '@angular/core';
import { Hero } from './hero';
import { HeroService } from './hero.service';
@Component({
selector: 'app-hero-list',
template: `
<div *ngFor="let hero of heroes">
{{hero.id}} - {{hero.name}}
</div>
`
})
export class HeroListComponent {
heroes: Hero[];
constructor(heroService: HeroService) {
this.heroes = heroService.getHeroes();
}
}
以上便实现了将HeroService类注入到了HeroListComponent类中。
解析修饰符:
angular的修饰符和Java的修饰符很像,可以使用 @Optional(),@Self(),@SkipSelf() 和 @Host() 来修饰 Angular 的解析行为。从 @angular/core 导入它们,并在注入服务时在组件类构造函数中使用它们。
修饰符的类型
解析修饰符分为三类:
@Optional
@Optional() 允许 Angular 将你注入的服务视为可选服务。这样,如果无法在运行时解析它,Angular 只会将服务解析为 null,而不会抛出错误。在下面的示例中,服务 OptionalService 没有在 @NgModule() 或组件类中提供,所以它没有在应用中的任何地方。
export class OptionalComponent { constructor(@Optional() public optional?: OptionalService) {} }
@Self()
@Self() 的一个好例子是要注入某个服务,但只有当该服务在当前宿主元素上可用时才行。为了避免这种情况下出错,请将 @Self() 与 @Optional() 结合使用。
@Component({ selector: 'app-self-no-data', templateUrl: './self-no-data.component.html', styleUrls: ['./self-no-data.component.css'] }) export class SelfNoDataComponent { constructor(@Self() @Optional() public leaf?: LeafService) { } }
其实就是在当前宿主元素上检索父元素,找到即停止搜索。
@SkipSelf()
@SkipSelf() 与 @Self() 相反。使用 @SkipSelf(),Angular 在父 ElementInjector 中而不是当前 ElementInjector 中开始搜索服务。因此,如果父 ElementInjector 对 emoji 使用了值 🌿(蕨类),但组件的 providers 数组中有 🍁(枫叶),则 Angular 将忽略 🍁(枫叶),而使用 🌿(蕨类)。
比较常用的就是这三个标签了。

浙公网安备 33010602011771号