Не удается разрешить все параметры для компонента: (?)

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

Я попытался скопировать этот паттерн из этого видео сюда: https://thewikihow.com/video_GioexP_s5Yc. Я несколько раз проверял свой код, и он ничем не отличается, кроме того, что я использую Angular и пытаюсь адаптировать этот шаблон между двумя компонентами.

Это моя установка:

наблюдатель.interface.ts

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

тема.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.info('I need to update my Editor with ' + 'fileName');
  }
}

Вы пытаетесь внедрить интерфейс в свой компонент? FileExplorer является экземпляром какого класса?

Zak 21.02.2019 09:53

Тема интерфейса в моем случае прописана в конструкторе. fileExplorer: Subject

Roadman1991 21.02.2019 10:02

Я действительно не могу ответить вам на этот вопрос. Все, что я в основном хочу, это чтобы компонент X уведомлял компонент Y о том, что что-то было нажато в компоненте X, и задавал параметры. Именно тогда я обнаружил эту наблюдаемую закономерность. Я пробовал ^^'. Я не знаю, как правильно.

Roadman1991 21.02.2019 10:15

Хорошо, я вижу. Ваши компоненты находятся на том же уровне? У них один и тот же родитель?

Zak 21.02.2019 10:20
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
0
4
250
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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


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

  1. Passing the reference of one component to another
  2. Communication through parent component
  3. Communication through Service

Вот статья

поэтому класс, который расширяет Subject, в моем случае FileExplorerComponent. В этом случае мне нужно внедрить этот класс в JsonBuilderComponent? Если я правильно понял.

Roadman1991 21.02.2019 10:08

Другие вопросы по теме