Angular 获取角度指令实例,即使它´;没有渲染
我试图得到一个角度指令实例,即使它还没有被渲染 例如,我得到了一个应用程序组件和baz指令。我希望获得指令实例,即使它没有显示/呈现到dom。当然,我可以通过输入变量控制功能,但在我的情况下,访问实例并调用一些函数会更好/更容易。因此,它的行为应该类似于NgIf*,不仅通过输入变量,而且通过实例函数调用 因此,我的问题是,即使没有渲染,我如何获取实例,或者是否有其他/更好的方法来处理这种情况Angular 获取角度指令实例,即使它´;没有渲染,angular,angular-directive,angular-components,Angular,Angular Directive,Angular Components,我试图得到一个角度指令实例,即使它还没有被渲染 例如,我得到了一个应用程序组件和baz指令。我希望获得指令实例,即使它没有显示/呈现到dom。当然,我可以通过输入变量控制功能,但在我的情况下,访问实例并调用一些函数会更好/更容易。因此,它的行为应该类似于NgIf*,不仅通过输入变量,而且通过实例函数调用 因此,我的问题是,即使没有渲染,我如何获取实例,或者是否有其他/更好的方法来处理这种情况 import {Component, Directive, OnInit, TemplateRef, V
import {Component, Directive, OnInit, TemplateRef, ViewChild, ViewContainerRef} from "@angular/core";
@Directive({selector: '[baz]'})
export class BazDirective
{
constructor(protected view: ViewContainerRef, protected template: TemplateRef<any>)
{
}
renderNow()
{
this.view.createEmbeddedView(this.template);
}
}
@Component({
selector: "app-root", templateUrl: "./app.component.html"
})
export class AppComponent implements OnInit
{
@ViewChild(BazDirective) bar: BazDirective
constructor()
{
}
ngOnInit(): void
{
this.bar.renderNow();
}
}
从“@angular/core”导入{Component,Directive,OnInit,TemplateRef,ViewChild,ViewContainerRef};
@指令({选择器:'[baz]'})
出口类指令
{
构造函数(受保护的视图:ViewContainerRef,受保护的模板:TemplateRef)
{
}
renderNow()
{
this.view.createEmbeddedView(this.template);
}
}
@组成部分({
选择器:“应用程序根目录”,模板URL:“./app.component.html”
})
导出类AppComponent实现OnInit
{
@ViewChild(BazDirective)栏:BazDirective
构造函数()
{
}
ngOnInit():void
{
this.bar.renderNow();
}
}
foo
是的,这是可能的,这取决于您所说的不渲染是什么意思。因为不可见并不意味着它不被渲染
有了结构指令,就像在您的示例中一样,您可以访问您的指令。下面是一个实例:。
如果您的指令真的没有呈现(例如用*ngIf包装),则情况并非如此
在您的示例中,您不应该在html元素上使用模板变量#bar
,因为您使用@ViewChild()来定位BazDirective
希望有帮助 是的,这是可能的,这取决于您所说的不渲染是什么意思。因为不可见并不意味着它不被渲染 有了结构指令,就像在您的示例中一样,您可以访问您的指令。下面是一个实例:。 如果您的指令真的没有呈现(例如用*ngIf包装),则情况并非如此 在您的示例中,您不应该在html元素上使用模板变量
#bar
,因为您使用@ViewChild()来定位BazDirective
希望有帮助 Not displayed=不可访问。这就是问题所在,因为指令存在,否则它无法对输入变量的更改做出反应。组件存在,指令不存在。它已从dom中删除,您无法访问它。Not display=Not accessible。这就是问题所在,因为该指令存在,否则它无法对输入变量的更改做出反应。该组件存在,该指令不存在。它已从dom中删除,您无法访问它。我的错误。在区分您和我的版本时,我注意到我的版本不起作用,因为我没有在模块声明中包含该指令。这是一个愚蠢的错误,没有特殊的角度行为。谢谢是的#bar var是一些测试的遗留物。没问题!很好,你解决了你的问题!我的错误。在区分您和我的版本时,我注意到我的版本不起作用,因为我没有在模块声明中包含该指令。这是一个愚蠢的错误,没有特殊的角度行为。谢谢是的#bar var是一些测试的遗留物。没问题!很好,你解决了你的问题!