我正在使用Angular 7,并尝试获取放置在 ng-template 标签内的参考变量。但是它总是返回 undefined
test-component.html
xs
test-component.ts
<ng-template #abc>
<div #xyz>
</div>
</ng-template>
test-component.ts
@ViewChild('abc') abc: ElementRef; //---> works fine
@ViewChild('xyz') xyz: ElementRef; //---> undefined
我已经尝试过在角度的所有生命周期挂钩中打印它,但是它总是返回未定义的。但是,当我尝试将其放在 ng-template 之外时,它就可以正常工作。
有什么办法吗?
答案 0 :(得分:1)
这是因为ng-template
中的内容尚未呈现。
您应该首先使用ngTemplateOutlet
激活它。
在您的html中添加以下代码,它应该可以工作
<ng-template #abc>
<div #xyz>
</div>
</ng-template>
<ng-container *ngTemplateOutlet="abc"></ng-container>
答案 1 :(得分:1)
之所以会发生这种情况,是因为ng-template从未单独呈现在html上。
根据Angular文档
the是用于呈现HTML的Angular元素。它永远不会直接显示。实际上,在渲染视图之前,Angular会用注释替换和及其内容。
可以使用ngTemplateOutlet
或使用*ngIf else
或类似的东西来引用它。它本身并不存在
更新:
<div *ngIf="someConditionCheck;else abc">
content here ...
</div>
<ng-template #abc>
<div #xyz>
</div>
</ng-template>