Angular 显示get方法不推荐的输出如何解决? Main.module.ts @NGD模块({ 声明:[HomeComponent,MasterComponent,], 进口:[ 浏览器模块, FormsModule, RouterModule.forRoot(主路由) ], 供应商:[ { 提供:BaseLogger, useClass:DBLogger }, {提供:“1”,useClass:DBLogger}, {提供:“2”,useClass:ConsoleLogger}, ], 引导:[主组件] }) 导出类main模块{ } ***customer.component.ts*** 我只是注入,但提供了组件构造函数中未显示的值 @组成部分({ 选择器:“客户应用程序”, templateUrl:“./customer.view.html”, 样式URL:['./customer.view.css'] }) 导出类CustomerComponent{ 标题:字符串='客户应用程序'; customerModel:Customer=新客户(); customerModels:Array=新数组(); loggerObj:BaseLogger=null; 构造器(_注入器:注入器){ this.loggerObj=_injector.get(“1”); --Show error get不推荐使用我在这里遇到一个错误我只想提供值 我不知道怎么做 注入 this.loggerObj.Log(); } } CustomerApp.logger.ts --------------------- 导出接口ILogger{ Log():void; } 导出类BaseLogger实现ILogger{ 日志(){ } } 导出类ConsoleLogger扩展了BaseLogger{ 日志(){ log('使用控制台记录器..'); } } 导出类DBLogger扩展了BaseLogger{ 日志(){ log(“使用数据库记录器”); } } 导出类FileLogger扩展BaseLogger{ Log():任何{ log(“使用文件记录器”); } }
错误: 您可以看到下面的代码,我正在尝试在构造函数中使用注入器 但我没有得到(“1”) 我正在努力做这件事 get方法已被弃用,因此如何从组件的构造函数中提供的值中获取1。Angular 显示get方法不推荐的输出如何解决? Main.module.ts @NGD模块({ 声明:[HomeComponent,MasterComponent,], 进口:[ 浏览器模块, FormsModule, RouterModule.forRoot(主路由) ], 供应商:[ { 提供:BaseLogger, useClass:DBLogger }, {提供:“1”,useClass:DBLogger}, {提供:“2”,useClass:ConsoleLogger}, ], 引导:[主组件] }) 导出类main模块{ } ***customer.component.ts*** 我只是注入,但提供了组件构造函数中未显示的值 @组成部分({ 选择器:“客户应用程序”, templateUrl:“./customer.view.html”, 样式URL:['./customer.view.css'] }) 导出类CustomerComponent{ 标题:字符串='客户应用程序'; customerModel:Customer=新客户(); customerModels:Array=新数组(); loggerObj:BaseLogger=null; 构造器(_注入器:注入器){ this.loggerObj=_injector.get(“1”); --Show error get不推荐使用我在这里遇到一个错误我只想提供值 我不知道怎么做 注入 this.loggerObj.Log(); } } CustomerApp.logger.ts --------------------- 导出接口ILogger{ Log():void; } 导出类BaseLogger实现ILogger{ 日志(){ } } 导出类ConsoleLogger扩展了BaseLogger{ 日志(){ log('使用控制台记录器..'); } } 导出类DBLogger扩展了BaseLogger{ 日志(){ log(“使用数据库记录器”); } } 导出类FileLogger扩展BaseLogger{ Log():任何{ log(“使用文件记录器”); } },angular,typescript,Angular,Typescript,错误: 您可以看到下面的代码,我正在尝试在构造函数中使用注入器 但我没有得到(“1”) 我正在努力做这件事 get方法已被弃用,因此如何从组件的构造函数中提供的值中获取1。 如果提供的值存在于我想要的主模块的提供程序:[]中,我想要什么 这个“1” 但是什么也没发生最后,我在下面得到了我的答案我要一步一步地解决这个问题 Main.module.ts @NgModule({ declarations:[HomeComponent,M
如果提供的值存在于我想要的主模块的提供程序:[]中,我想要什么 这个“1”
但是什么也没发生最后,我在下面得到了我的答案我要一步一步地解决这个问题
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>我将DBLogger作为get()的类型应用
Ex:constructor(喷油器:喷油器){
this.loggerObj=_injector.get(“1”);
this.loggerObj.Log();
}
注意:数据库记录器已存在于CustomerApp.logger.ts中
步骤2:我使用了一行,而不是为参数指定“1”或“2”
export const DB=new InjectionToken(“1”);
并将此DB应用于要获取的参数(DB)
例子:
导出类CustomerComponent{
loggerObj:BaseLogger=null;
构造器(_注入器:注入器){
this.loggerObj=_injector.get(DB);//
this.loggerObj.Log();
}
步骤3:也应用于提供值
供应商:[
{
提供:BaseLogger,
useClass:DBLogger
},
{provide:DB,useClass:DBLogger},//这里我应用DB而不是“1”
],
Per您需要使用类型或注入令牌,而不仅仅是一个空字符串。请参阅例如,而不是get(“1”)你知道使用的是哪种方法吗?从v4.0.0中不推荐使用类型或InjectionToken是的,我已经看到了这一点,但我没有看到?我已经将你链接到了说明如何定义和使用注入令牌的文档。是的!!但我现在没有得到apply injector to constructor(),我还添加了我的记录器代码?
step 1> I apply DBLogger as a type to get()
Ex: constructor(_injector: Injector) {
this.loggerObj = _injector.get<DBLogger>("1");
this.loggerObj.Log();
}
Note: DBLogger already Present in CustomerApp.logger.ts
step 2: instead of assign "1" or "2" to the parameter I have used one line
export const DB=new InjectionToken("1");
and Apply this DB to the parameter to get<DBLogger>(DB)
Example :
export class CustomerComponent {
loggerObj: BaseLogger = null;
constructor(_injector: Injector) {
this.loggerObj = _injector.get<DBLogger>(DB);//
this.loggerObj.Log();
}
step 3: also apply to the provide value also
providers:[
{
provide:BaseLogger,
useClass:DBLogger
},
{provide:DB,useClass:DBLogger}, // here I apply DB instead of "1"
],