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 显示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”) 我正在努力做这件事 get方法已被弃用,因此如何从组件的构造函数中提供的值中获取1。
如果提供的值存在于我想要的主模块的提供程序:[]中,我想要什么 这个“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" 
    ],