export class HRobot {
public meat: Meat;
public salad: Salad;
constructor() {
this.meat = new Meat();
this.salad = new Salad();
}
cook() {}
}
export class HRobot {
public meat: Meat;
public salad: Salad;
constructor(public meat: Meat, public salad: Salad) {
this.meat = meat;
this.salad = salad;
}
cook() {}
}
let hRobot = new HRobot(new Meat(), new Salad());
class Chicken extends Meat {
meat = 'chiken';
}
let cRobot = new HRobot(new Chicken(), new Salad());
export class HRobotFactory {
createHRobot() {
let robot = new HRobot(this.createMeat(), this.createSalad());
}
createMeat() {
return new Meat();
}
creatSalad() {
return new Salad();
}
}
var injector = new Injector(...); var robot = injector.get(HRobot); robot.cook();
import { ReflecttiveInjector } form '@angular/core';
var injector = ReflectiveInjector.resolveAndCreat([
{provide: HRobot, useClass: HRobot},
{provide: Meat, useClass: Meat},
{provide: Salad, useClass: Salad}
]);
export class Robot {
//...
consructor(public meat: Meat, public salad: Salad) {}
//...
}
// app.component.ts
//...
// 1. 导入被依赖对象的服务
import { MyService } from './my-service/my-service.service';
@Component({
//...
// 2. 在组件中配置注入器
providers: [
MyService
]
//...
})
export class AppComponent {
// 3. 在构造函数中声明需要注入的依赖
constructor(private myService: MyService) {}
}
// power.service.ts
import { Injectable } from '@angular/core';
@Injectable()
export class PowerService {
// power come from here..
}
// count.service.ts
import { Injectable } from '@angular/core';
import { PowerService } from './power/power.service';
@Injectable()
export class CountService {
constructor(private power: PoowerService) {}
}
// app.component.ts 这里是当前组件,其实模块中的注入也一样,后面讲到
//...
providers: [
CountService,
PowerService
]
// app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { AppComponent } from './app.component';
@NgModule({
declarations: [
AppComponent,
],
imports: [
BrowserModule
],
providers: [CountService, PowerService],
bootstrap: [AppComponent]
})
export class AppModule { }
// ...
@NgModule({
imports: [
AModule,
BModule
]
// ...
})
// a.module.ts
// ...
@NgModule({
imports: [BModule]
})
// ...
@Component({
//...
// 2. 在组件中配置注入器
providers: [
MyService
]
//...
})
@Component({
//...
// 2. 在组件中配置注入器
providers: [
{provide: MyService, useClass: MyService}
]
//...
})
```ts
var inject = Injector.resolveAndCreate([
{provide: Render, useClass: DomRender}
//{provide: Render, useClass: DomRender} // canvas 渲染方式
//{provide: Render, useClass: DomRender} // 服务的想染方式
])
// 调用方不用做任何修改
class AppComponent {
construtor(private render: Render) {}
}
```
```ts
let freeMan = {
freeJob: boolen;
live: () => {return 'do something u cant do'}
};
@Component({
// ...
providers: [
{provide: 'someone', useValue: freeMan}
]
})
```
// ...
providers: [
{provider: Power1, useClass: PowerService},
{provider: Power2, useClass: PowerService}
]
// ...
// ...
providers: [
{provider: Power1, useClass: PowerService},
{provider: Power2, useExisting: PowerService}
]
// ...
```ts
// app.module.ts
@NgModule({
// ...
providers: [
HeroService,
ConsoleService,
{
provide: LoggerService,
useFactory: (consoleService) => {
return new LoggerService(true, consoleService);
},
deps: [ConsoleService]
}
],
bootstrap: [AppComponent]
})
export class AppModule { }
// console.service.ts
// ...
export class ConsoleService {
log(message) {
console.log(`ConsoleService: ${message}`);
}
}
// logger.service.ts
// ...
export class LoggerService {
constructor(private enable: boolean,
consoleService: ConsoleService
) { }
log(message: string) {
if (this.enable) {
console.log(`LoggerService: ${message}`);
}
}
}
// app.component.ts
// ...
import { Optional } from '@angular/core';
constructor(@Optional() private logger: LoggerService) {
if (this.logger) {
this.logger.log('i am choosed');
}
}
// ...
@Component({
selector: 'parent',
template: `
<h1>这里是父组件</h1>
`
})
constructor(
@Host()
logger: LoggerService) {}
// 加上@Host之后会报错,因为我们并没有在这个组件中注入LoggerService
// 但是我们可以加上@Optional来避免报错
//@Host()
//@Optional()
//logger: LoggerService) {}
)
// parent.component.ts
// ...
@Component({
selector: 'parent',
template: `
<h1>这里是父组件</h1>
<ng-content></content>
`
// 在父组件中注入 LoggerService
providers: [LoggerService]
})
constructor() {}
// child.component.ts
// ...
@Component({
selector: 'child',
template: `
<h1>这里是子组件</h1>
`
})
constructor(
@Host()
@Optional()
logger: LoggerService)
){}
<parent> <child></child> </parent>
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有