Angular 2 DI:将输入绑定传递给工厂提供商的deps

Dom*_*nic 4 angular2-injection angular2-inputs angular

有没有一种简单的方法将输入绑定注入提供程序工厂的deps数组?下面显然不起作用.

const myServiceFactory = (object: any) => {
   //...
};

@Component({
    // ...
    inputs: ['object'],
    providers: [
        {
            provide: Object,
            useValue: object,
        },
        {
            provide: MyService,
            useFactory: myServiceFactory,
            deps: [Object]
        }
    ]
})
Run Code Online (Sandbox Code Playgroud)

yur*_*zui 6

作为可能的解决方案,您可以尝试这样做:

const myServiceFactory = (self: Child) => {
  return new MyService(self.param);
};

class MyService {
  constructor(private param: string) {}
}
@Component({
  selector: 'child',
  template: `{{ param }}`,
  providers: [
    {
      provide: MyService,
      useFactory: myServiceFactory,
      deps: [Child]
    }
  ]
})
export class Child {
  @Input() param: any;

  constructor(private inj: Injector) { }

  ngOnInit() { // or ngOnChanges
    let service = this.inj.get(MyService);
  }
}
Run Code Online (Sandbox Code Playgroud)

Plunker示例