我有一个动态组件已经使用了一段时间了。现在,我想在其模型中添加一个“可观察的”,以便可以从组件外部触发更改。因此,我有一个服务(在组件外部),具有:
public menuToggleSubject = new Subject<any>();
public menuToggleSubjectTrigger: Observable<any> = this.menuToggleSubject.asObservable();
public toggleMenu() {
this.menuToggleSubject.next();
}
在我的组件模型中,我拥有:
export class LayoutHeader {
constructor(public sideNavToggleSubjectTrigger: Observable<any>
) {}
然后,在我要加载动态组件的组件中,我有:
this.item = { sideNavToggleSubjectTrigger: this.siteService.menuToggleSubjectTrigger };
但是,出现以下错误:
错误TS2322:类型'{(已删除):({组件:typeof(已删除)是 不可分配给“ LayoutHeader”类型。财产种类 “ sideNavToggleSubjectTrigger”不兼容。类型 无法将“可观察”分配给“可观察”类型。二 存在具有此名称的不同类型,但是它们是无关的。属性 “源”以“可观察”类型保护,但以类型公开 “可观察”。
注意:我确实删除了一些不相关的文本(为清晰起见,我删除了LayoutHeader类的其他成员)。我认为主要的错误/问题是Observable的两个定义不匹配。但是我不知道为什么。
答案 0 :(得分:0)
我对cgTag的回答是正确的,即动态加载的组件中的rxjs和该组件的主机必须为同一版本。一旦将两个package.json都更新为相同的版本,一切就很好了。我是对的,但我不喜欢它:),因为这会创建一个非常脆弱的链接。如果有人知道解决方法,请告诉我。 I plan on asking a separate SO question for this