Как получить доступ к директиве из службы в Angular 2?

#angular

#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:

Angular 2 не позволяет вводить директивы / компоненты. Это будет правильным способом для директивного прослушивания службы. Вы можете создать EventEmitter, представляющий, например, fileUploaded$ event , поэтому в директиве вы можете сделать что-то вроде этого:

 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)
  }    
}