从Injectable中访问Angular 2组件

3
我不太确定如何解释这个问题,但我会尽力而为。
我有一个可注入的提供程序,在主应用程序中进行引导。该提供程序试图访问一个组件。
我可以从其他组件使用ViewChild访问该组件,但我无法从可注入的提供程序中访问该组件。我认为这是因为提供程序在组件之前初始化,因此在ViewChild查询中不可用。
是否有一种方法可以从可注入函数内部使用Viewchild引用?例如,当我调用函数时初始化子项。
抱歉如果这很令人困惑,我不是很确定如何解释。
谢谢, Radu
1个回答

1

@ViewChild()查询视图。可注入的(服务)没有视图,因此@ViewChild()无法找到视图。此外,Angular首先不会处理服务中的@ViewChild()注释,仅在指令和组件中进行处理。

您可以使用@ViewChild()查询并将结果传递给共享服务。


现在我的解决方法是在服务中有一个公共变量,我只是在afterViewInit函数中设置它,然后它就可以在之后使用了。我认为这可能是一种更清晰的方式。感谢您的解释。 - keepwalking
我认为,将@ViewChild() (ElementRef)或者其返回结果作为服务并使用是一种糟糕的设计。我更愿意使用服务与包含 @ViewChild() 的组件进行通信,以使组件针对该引用执行命令,而不是在组件之间传递引用。 - Günter Zöchbauer
有什么提示可以让我的服务与组件通信吗? - keepwalking
谢谢教程。如果我有两个不在同一HTML树中的组件,我需要使用服务进行引用,对吗? - keepwalking
不确定您所说的“不在同一HTML树”是什么意思。也许像https://dev59.com/R1oV5IYBdhLWcg3wL8aw#36566919?noredirect=1#comment60736661_36566919那样,有两个独立引导的Angular2应用程序?如果两个组件都在同一个Angular应用程序中,则可以通过添加共享服务的位置来定义其作用域。它需要是一个公共父级。根组件是您的Angular2应用程序中所有组件的公共父级。 - Günter Zöchbauer
问题是我正在使用自动引导应用程序的Ionic 2。如果您了解Ionic 2,请参考http://stackoverflow.com/questions/37695386/ionic-2-getcomponent-alternative。 - keepwalking

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接