如何从Angular 2中的服务访问指令?

时间:2016-10-04 11:01:56

标签: angular

注意:我正在使用Angula rc2

我的目标是:在服务指令中设置属性值

我设置了一个使用服务的自定义指令:

@Directive({
    selector: '[chooseFile]'
})

@Injectable()
export class ChooseFileDirective implements OnInit {
  property1: number = 1;

  constructor(private _element: ElementRef, private _uploadService: UploadFile) { }

  ngOnInit() {
    this._uploadService.foo();
  }    
}

UploadService

@Injectable()
export class UploadFile {

  constructor(private _chooseFileDirective: ChooseFileDirective) {}

  foo() {
    // update variable on calling directive
    _chooseFileDirective.property1++;
  }
}

我得到的错误:

  

错误:(SystemJS)错误:无法解析UploadFile的所有参数:(?)

我尝试过的(单身和全部):

  • 在指令
  • 中添加@Injectable()装饰器
  • 将指令添加到app.component
  • 中的提供程序
  • 添加服务的构造函数:@Inject(ChooseFileDirective)_chooseFileDirective:ChooseFileDirective

1 个答案:

答案 0 :(得分:1)

Angular 2不允许注入指令/组件。这是一种指示听取服务的方式。 您可以创建一个表示例如fileUploaded $ event的EventEmitter,因此在指令中您可以执行以下操作:

export class ChooseFileDirective implements OnInit {
  property1: number = 1;

  constructor(private _element: ElementRef, private _uploadService: UploadFile) { }

  ngOnInit() {
    this._uploadService.foo();
    this.fileUploaded$.subscribe(file => //do your stuff)
  }    
}