【发布时间】: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