Angular 2中的父子关系

Angular 2中的父子关系,angular,typescript,Angular,Typescript,我有两个页面和小部件。我用选择器在page1中调用page2,我的小部件在page2中以同样的方式打开 问题是,我可以在widget中调用page2的函数。但我无法访问page1的属性它们未定义。我想当小部件打开时,page1就会消失。角结构正常吗?我能提供page1还在运行吗 多谢各位 在第1页视图中: <page2></page2> 我可以通过这种方式访问。我在widget的构造函数中定义了_page2。 但我无法定义第1页。它给出了“无提供程序”错误 _page1

我有两个页面和小部件。我用选择器在page1中调用page2,我的小部件在page2中以同样的方式打开

问题是,我可以在widget中调用page2的函数。但我无法访问page1的属性它们未定义。我想当小部件打开时,page1就会消失。角结构正常吗?我能提供page1还在运行吗

多谢各位

在第1页视图中:

<page2></page2>
我可以通过这种方式访问。我在widget的构造函数中定义了_page2。 但我无法定义第1页。它给出了“无提供程序”错误

_page1.Test1()  // this is not possible.

这是怎么回事?两页有一个模块。Page2没有抛出提供程序错误,但page1抛出了错误。

我想您的代码应该是这样的

app.html

在任何人告诉你不要这样做之前:是的,这是一个糟糕的做法,因为它会产生强烈的依赖性。但这回答了问题

第二个选项是创建视图子项并动态指定其值:

第1页HTML&TS

现在,在第一个组件中,您可以

this.p2.w1.page1 = this;
this.p2.w2.page1 = this;
但这太恶心了,你不应该这么做

第三种解决方案,使用带有主题的服务

服务

第1页


应该是这样做的。

请添加代码。我会尽快完成。这有点复杂不要发布复杂的代码。首先将代码减少到允许重现问题的绝对最小值。我以前尝试过这种方法。但他们没有给出结果。我的问题是page1在此期间没有运行。我想这是关于我的项目结构。其中一些方法被彻底搞砸了,尤其是第一种,我怀疑你是否尝试过所有这些方法。。。但是如果你的第1页没有运行,这意味着你的应用程序没有运行,对吗?我的应用程序仍在运行。我可以顺利地使用小部件。但我必须从第1页调用函数。如果你的小部件来自第2页,第2页来自第1页,那么如果你没有运行第1页,那么你就不会有第2页和标题!我通过第2页打开小部件,通过第1页打开第2页。这不是问题,但如果我想返回到第1页,我无法访问它。
_page1.Test1()  // this is not possible.
<page1></page1>
<page2></page2>
<widget1></widget1>
<widget2></widget2>
constructor(
  @Inject(forwardRef(() => PageOneComponent)) private page1: PageOneComponent,
) {}
<page2 #p2></page2>
@ViewChild(PageTwoComponent) p2: PageTwoComponent;
<widget1 #w1></widget1>
<widget2 #w2></widget2>
@ViewChild(WidgetOneComponent) w1: WidgetTwoComponent;
@ViewChild(WidgetTwoComponent) w2: WidgetTwoComponent;
page1: PageOneComponent;
this.p2.w1.page1 = this;
this.p2.w2.page1 = this;
export class MyService {
  onEvent: Subject<any> = new Subject();

  propagate() { this.onEvent.next(null); }
}
constructor(private service: MyService) {
  // you can call
  service.propagate();
}
// Subscribe to the propagation
this.service.onEvent.subscribe(() => { this.myMethod(); });