为什么角度不允许我在提供程序的useFactory中传递参数来起作用?

时间:2019-07-05 09:32:56

标签: javascript angular typescript dependency-injection angular5

app.module.ts

   bootstrap: [AppComponent],
      declarations: [AppComponent],
      imports: [
        CoreModule,
        HelloFrameworkModule,
      ],
      providers: [{
        provide: Logger,
        useFactory: loggerProviderFunc(1),

      }]
    })

app.component.ts

@Component({
  selector: 'my-app',
  styleUrls: ['./app.component.scss'],
  templateUrl: './app.component.html',
})
export class AppComponent {
   constructor(private c:Logger){ 
   }
}

logger.ts

export class Logger {
  constructor(private msg: string) {
     console.log(this.msg);
  } 
}
  

错误:ERROR类型错误:工厂不是函数       在_callFactory

我在控制台中将传递的值设为1,但紧接其后我也收到错误。但是,如果我只是删除参数,即将loggerProviderFunc(1)更改为loggerProviderFunc

,则会在控制台中得到零错误。

1 个答案:

答案 0 :(得分:1)

provideFactory:字段需要一个函数,而不是调用该函数的结果。

如果希望将其与参数一起使用,则可以使用箭头表达式:

bootstrap: [AppComponent],
  declarations: [AppComponent],
  imports: [
    CoreModule,
    HelloFrameworkModule,
  ],
  providers: [{
    provide: Logger,
    useFactory: () = > loggerProviderFunc(1),
  }]
})

也许Angular还允许调用useValue:的函数,但这未经测试。如果可行,请注意,它将仅被调用一次,而工厂方法在每次解析程序完成其解析工作时都会被调用。

bootstrap: [AppComponent],
  declarations: [AppComponent],
  imports: [
    CoreModule,
    HelloFrameworkModule,
  ],
  providers: [{
    provide: Logger,
    useValue: loggerProviderFunc(1)
  }]
})