Не удается разрешить все параметры для компонента: (?) - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть сообщение об ошибке, как говорится в заголовке.Я искал решение здесь, но, к сожалению, @Injectable() не работает, так как я работаю с интерфейсами, и я также попытался @Input().Здесь я пытаюсь сделать паттерн Observer, чтобы получать уведомления, когда что-то происходит при клике.

Я пытался скопировать этот паттерн из этого видео здесь: https://www.youtube.com/watch?v=GioexP_s5Yc.Я проверял свой код несколько раз, и он не отличается, за исключением того, что я использую Angular и пытаюсь адаптировать этот шаблон между двумя компонентами.

Это мои настройки:

наблюдатель.интерфейс.ts

export interface Observer {
    update(fileName: string);
}

subject.interface.ts

import { Observer } from "./observer.interface";

export interface Subject {
    registerObserver(o: Observer);
    removeObserver(o: Observer);
    notifyObservers();
}

XComponent.ts

export class FileExplorerComponent implements OnInit, Subject {

  fileString: string;
  private observers: Observer[] = [];

  showFile(fileName) {
    this.fileString = fileName;
    this.notifyObservers();
  }

  public registerObserver(o: Observer) {
    this.observers.push(o);
  }

  public removeObserver(o: Observer) {
    let index = this.observers.indexOf(o);
    this.observers.splice(index, 1);
  }

  public notifyObservers() {
    for (let observer of this.observers) {
      observer.update(this.fileString);
    }
  }
}

YComponent.ts

import { Subject } from '../X/subject.interface';
import { Observer } from '../X/observer.interface';

export class JsonBuilderComponent implements Observer {

subject: Subject;

constructor(fileExplorer: Subject){
this.subject = fileExplorer;
fileExplorer.registerObserver(this);
}

  update(fileName: string) {
    console.log('I need to update my Editor with ' + 'fileName');
  }
}

1 Ответ

0 голосов
/ 21 февраля 2019

Angular пытается установить и внедрить объект fileExplorer в YComponent.Но интерфейс не может быть установлен.Вы должны создать инъецируемый класс, который расширяет интерфейс Subject, и внедрить его в ваш компонент.В видео вы можете видеть, что рабочая станция расширяет тему.


Если вы хотите общаться между компонентами, в моих знаниях есть 3 способа:

  1. Передачассылка одного компонента на другой
  2. Связь через родительский компонент
  3. Связь через службу

Вот статья

...