Angular 跟随所有类实例化的生命周期钩子

Angular 跟随所有类实例化的生命周期钩子,angular,Angular,想象一下Angular 4中的组件树: A / \ B D / \ C E 我想在E中运行一些,但我想确保C的构造函数已经初始化。E上的ngAfterViewInit()能否保证这一点?是否确定所有5个构造函数都已在ngAfterViewInit之前初始化?再一次,我希望E中的某些东西能够保证上述内容。为什么您

想象一下Angular 4中的组件树:

                  A
                 / \ 
                B   D
               /     \
              C       E

我想在E中运行一些
,但我想确保C的
构造函数已经初始化。E上的
ngAfterViewInit()
能否保证这一点?是否确定所有5个构造函数都已在
ngAfterViewInit
之前初始化?再一次,我希望E中的某些东西能够保证上述内容。

为什么您不能使用服务?例如,在C的构造函数中,您可以将该服务的标志设置为true。在E组件中,如果服务中的flag值为true,则可以执行简单的条件调用函数。

是的,构造函数是第一个运行的生命周期方法,因此不应该出现问题。例如,您可以使用构造函数中的console.log和不同组件的ngOnInit轻松测试这一点


编辑:显然,只有在组件没有条件地或异步地初始化时,这才是正确的。

没有这样的保证。即使在触发E
ngAfterViewInit
时已经实例化了C,这也可能不适用于其他情况,例如组件异步编译时。依靠这种优先权是错误的做法

如果目标是将消息从E发送到C或从E发送到C,则应通过公共父(a)属性或属于父或更高级别的服务执行通信

考虑到可观测对象订阅和发出值的顺序尚未确定,它应该是可重复的,例如,
ReplaySubject
。在这种情况下,订户将以任何方式接收消息

考虑到主体的定义为:

fooSubject = ReplaySubject(1)

在组件A中,对它的引用被传递给C和E,组件E以
fooSubject的形式发送消息。接下来(…)
,组件C以
fooSubject的形式接收消息。订阅(…)

我想通过可观察对象传输事件。我不想要你建议的解决方案你没有提到怎么做,所以我建议你简单的解决方案。使用可见光进行通信: