2016-10-04 2 views
0

Примечание: Я использую Ангула RC2Как получить доступ к директиве службы в Angular 2?

Моя цель заключается в следующем: установить значение свойства в директиве от службы

Я создал пользовательскую директиву, которая использует службу:

@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++; 
    } 
} 

Ошибки я получаю:

Error: (SystemJS) Error: Can't resolve all parameters for UploadFile: (?)

То, что я пытался (один и все вместе):

  • добавить @Injectable() декоратор в директиве
  • добавить директивы поставщиков в app.component
  • добавить в конструктор службы: @Inject (ChooseFileDirective) _chooseFileDirective: ChooseFileDirective

ответ

1

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

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

спасибо. выглядит как хорошее решение. Мне нужно реорганизовать некоторые другие вещи в приложении, тогда я также проверю это и соглашусь с ответом :) – dragonmnl

Смежные вопросы