angular - 获取角度指令实例,即使它没有被渲染
问题描述
我试图获得一个角度指令实例,即使它尚未呈现。
例如,我有一个 app-component 和 baz-directive。即使没有显示/呈现给dom,我也想获取指令实例。当然,我可以通过输入 var 来控制功能,但在我的情况下,访问实例并调用一些函数会更好/更容易。所以它的行为应该类似于 NgIf*,不仅通过输入 var,而且通过实例函数调用。
所以我的问题是,即使它没有被渲染,我如何获得实例,或者是否有任何其他/更好的方法来处理这种情况?
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();
}
}
<div #bar *baz>foo</div>
解决方案
是的,这是可能的,这取决于您所说的未渲染是什么意思。因为不可见并不意味着它没有被渲染。
使用结构指令,就像在您的示例中一样,您可以访问您的指令。这是一个活生生的例子:Stackblitz。如果您的指令真的没有被渲染(例如包装在 *ngIf 中),情况并非如此。
在您的示例中,您不应#bar
在 html 元素上使用模板变量,因为您使用 @ViewChild() 定位 BazDirective。
希望能帮助到你!
推荐阅读
- javascript - 如何在反应中使用脚本?
- c++ - C++ 设置迭代器导致错误。表达式:map/set 迭代器不兼容
- c++ - 如何在线性时间内找到乘积可被 4 整除的子数组的数量
- javascript - “无结果”不适用于过滤器搜索栏
- python - 如何在 Python 中使用子进程
- c++ - 向量数组输入问题,可能是索引问题
- pyperclip - 我在安装 pyperclip 时遇到错误
- javascript - React-google-chart 不占用选项
- java - 尽管是前台服务,但服务在杀死应用程序后大约 30-40 分钟被系统停止/杀死
- javascript - Angular:使用@types/spotify-web-playback-sdk 时找不到命名空间“Spotify”