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