【发布时间】:2021-04-03 09:46:55
【问题描述】:
Main.module.ts
@NgModule({
declarations:[HomeComponent,MasterComponent,],
imports:[
BrowserModule,
FormsModule,
RouterModule.forRoot(MainRoutes)
],
providers:[
{
provide:BaseLogger,
useClass:DBLogger
},
{provide:"1",useClass:DBLogger},
{provide:"2",useClass:ConsoleLogger},
],
bootstrap:[MasterComponent]
})
export class MainModule{
}
***customer.component.ts***
I just injection but provide value not shown in the constructor of the component
@Component({
selector: 'cust-app',
templateUrl: './customer.view.html',
styleUrls: ['./customer.view.css']
})
export class CustomerComponent {
title: string = 'Customer Application';
customerModel:Customer = new Customer();
customerModels:Array<Customer> = new Array<Customer>();
loggerObj: BaseLogger = null;
constructor(_injector: Injector) {
this.loggerObj = _injector.get("1");
-- Show error get is deprecated I got an error here I just want to provide value
I do not know how
to inject
this.loggerObj.Log();
}
}
CustomerApp.logger.ts
---------------------
export interface ILogger{
Log():void;
}
export class BaseLogger implements ILogger{
Log(){
}
}
export class ConsoleLogger extends BaseLogger{
Log(){
console.log('Using Console Logger..');
}
}
export class DBLogger extends BaseLogger{
Log(){
console.log('Using Database Logger');
}
}
export class FileLogger extends BaseLogger{
Log():any{
console.log('Using File Logger');
}
}
错误:
你可以看到下面的代码我试图在构造函数中使用注入器
但我没有得到(“1”)
我正在努力做
get 方法已弃用,因此如何从组件的构造函数中提供 1 值。
如果提供的值存在于我想要的主模块的提供者中,我想要什么:[]
这个“1”
但什么也没发生
【问题讨论】:
-
根据angular.io/api/core/Injector#get,您需要使用类型或注入令牌,而不仅仅是裸字符串。参见例如angular.io/guide/….
-
而不是 get("1") 你能知道使用哪种方法吗?从 v4.0.0 弃用使用 Type 或 InjectionToken 是的,我已经看到了,但我没有得到?
-
我已经将您链接到说明如何定义和使用注入令牌的文档。
-
是的!但我没有将注入器应用于构造函数()
-
现在我也添加了我的记录器代码?
标签: angular typescript