【问题标题】:Can't resolve all parameters for Component: (?)无法解析组件的所有参数:(?)
【发布时间】:2019-02-21 08:45:12
【问题描述】:

如标题所示,我收到一条错误消息。我在这里搜索了一个解决方案,但不幸的是@Injectable() 不起作用,因为我正在使用接口,我也尝试了@Input()。我在这里尝试做的是一个观察者模式,当点击发生某些事情时得到通知。

我试图从这里的视频中复制这种模式:https://www.youtube.com/watch?v=GioexP_s5Yc。 我检查了我的代码几次,除了我使用 Angular 并尝试在 2 个组件之间调整这种模式之外,它并没有什么不同。

这是我的设置:

observer.interface.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');
  }
}

【问题讨论】:

  • 您是否尝试向您的组件注入接口? FileExplorer 是哪个类的实例?
  • 在我的例子中是在构造函数中编写的接口主题。 fileExplorer: Subject
  • 我真的无法回答你这个问题。我基本上想要的是组件 X 通知组件 Y 在组件 X 上单击了某些东西并提供参数。就在那时,我发现了这种可观察到的模式。我试过了^^'。我不知道正确的方法是什么。
  • 好的,我明白了。您的组件是否处于同一级别?他们是同一个父母吗?

标签: angular observer-pattern subject subject-observer


【解决方案1】:

Angular 正在尝试将对象 fileExplorer 实例化并注入到 YComponent。但是不能实例化接口。您必须创建一个扩展 Subject 接口的可注入类,并将其注入到您的组件中。在视频中,您可以看到 Workstation 扩展了主题。


如果你想在组件之间进行通信,据我所知有3种方式:

  1. 将一个组件的引用传递给另一个组件
  2. 通过父组件通信
  3. 通过服务进行通信

这是article

【讨论】:

  • 所以扩展 Subject 的类是我的情况是 FileExplorerComponent。在那种情况下,我必须将该类实现到 JsonBuilderComponent 中吗?如果我做对了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-24
  • 1970-01-01
  • 1970-01-01
  • 2018-05-18
  • 1970-01-01
  • 2017-02-12
相关资源
最近更新 更多