Angular 2传递参数到构造函数抛出DI异常

前端之家收集整理的这篇文章主要介绍了Angular 2传递参数到构造函数抛出DI异常前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想在构造函数中的组件上设置字符串属性,但是当我尝试这样的东西时
  1. @Component({
  2. selector: 'wg-app',templateUrl: 'templates/html/wg-app.html'
  3. })
  4. export class AppComponent {
  5.  
  6. constructor(private state:string = 'joining'){
  7.  
  8. }
  9. }

我得到DI例外

  1. EXCEPTION: No provider for String! (AppComponent -> String)

显然,注入器正试图找到一个“字符串”提供者,但找不到任何.

我应该为这类事物使用什么样的模式?例如.将初始参数传递给组件.

应该避免吗?我应该注入初始字符串吗?

您可以使用@Input()属性.
  1. <my-component [state]="'joining'"></my-component>
  2.  
  3. export class AppComponent {
  4. @Input() state: string;
  5. constructor() {
  6. console.log(this.state) // => undefined
  7. }
  8. ngOnInit() {
  9. console.log(this.state) // => 'joining'
  10. }
  11. }

构造函数通常只用于DI …

但如果你真的需要它,你可以创建注射变量(plunker)

  1. let REALLY_IMPORTANT_STRING = new OpaqueToken('REALLY_IMPORTANT_STRING');
  2. bootstrap(AppComponent,[provide(REALLY_IMPORTANT_STRING,{ useValue: '!' })])
  3.  
  4. export class AppComponent {
  5. constructor(@Inject(REALLY_IMPORTANT_STRING) public state: REALLY_IMPORTANT_STRING) {
  6. console.log(this.state) // => !
  7. }
  8. }

最简单的选择是设置类属性

  1. export class AppComponent {
  2. private state:string = 'joining';
  3. constructor() {
  4. console.log(this.state) // => joining
  5. }
  6. }

正如@Mark所指出的,另一种选择是使用服务:

  1. export class AppService {
  2. public state:string = 'joining';
  3. }
  4. export class AppComponent {
  5. constructor(private service: AppService) {
  6. console.log(this.service.state) // => joining
  7. }
  8. }

猜你在找的Angularjs相关文章