【问题标题】:Angular 2 access component from Injectable来自 Injectable 的 Angular 2 访问组件
【发布时间】:2023-03-15 19:43:01
【问题描述】:

不太清楚如何解释,但我会尽力而为。

我有一个在主应用程序中引导的可注入提供程序。提供者试图访问一个组件。

我可以使用 ViewChild 从其他组件访问该组件,但我不能从可注入提供程序访问该组件。我认为这是因为提供程序在组件之前初始化,所以它不适用于 ViewChild 查询。

有没有一种方法可以从可注入函数内部使用 Viewchild 引用?当我调用函数时,像初始化孩子一样。

对不起,如果这令人困惑,不知道如何解释。

谢谢, 拉度

【问题讨论】:

    标签: typescript angular


    【解决方案1】:

    @ViewChild() 查询视图。可注入(服务)没有视图,因此@ViewChild() 找不到。此外,Angular 最初不会在服务中处理 @ViewChild() 注释,只在指令和组件中处理。

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

    【讨论】:

    • 现在我的解决方法是在服务内部有一个公共变量,我只是在 afterViewInit 函数中设置它,然后我可以使用它。我只是强硬,这将是一种更清洁的方式。谢谢解释
    • 我认为拥有@ViewChild() (ElementRef) 或者它在服务中返回的任何东西都是不好的设计。我宁愿使用服务与包含@ViewChild() 的组件进行通信,以使组件针对引用执行命令,而不是传递引用。
    • 关于如何使服务与组件通信的任何指示?
    • 感谢您的教程。如果我有 2 个不在同一个 html 树中的组件,我必须使用服务作为参考吗?
    • 不确定“不在同一个 html 树中”是什么意思。也许像stackoverflow.com/questions/36566698/… 有两个独立引导的Angular2 应用程序?如果两个组件都在同一个 Angular 应用程序中,您可以通过将共享服务添加为提供者的位置来定义共享服务的范围。它需要是一个共同的父母。根组件是 Angular2 应用程序中所有组件的共同父级。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 2018-01-05
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-28
    • 2016-05-06
    相关资源
    最近更新 更多