为何传递变量/对象时ngTemplateOutlet无法正常工作?
问题分析与修复方案
从你贴的代码来看,有几个明显的语法错误会导致filters在模板中变为null,咱们一个个来捋:
1. 模板标签未正确闭合
你最后一行的<ng-template>应该是</ng-template>,标签闭合错误会让Angular的模板解析器陷入混乱,无法正确识别filterTemplate的范围,自然也就无法正确传递上下文变量。
修复后的完整模板结构应该是:
<form *ngIf="filters"> <ng-container *ngTemplateOutlet="filterTemplate; context: {$implicit: filters}"></ng-container> </form> <ng-template #filterTemplate let-filters> <ng-container *ngFor="let field of filters"> {{field.something}} </ng-container> </ng-template>
2. 插值表达式语法错误
你写的{field.something}缺少了一个大括号,正确的Angular插值表达式应该是{{field.something}}。这个错误虽然不会直接导致filters为null,但会导致模板渲染失败,也可能间接影响上下文变量的正常传递。
额外排查点
如果上面的修复后问题依然存在,你可以做这两步检查:
- 在组件类里用
console.log(filters)打印确认:外层*ngIf="filters"中的filters是否确实是一个非空的数组/对象 - 若
filters是异步加载的数据(比如来自HTTP请求),需要搭配async管道使用(比如*ngIf="filters | async"),确保模板渲染时filters已经有可用的值
内容的提问来源于stack exchange,提问作者Donovant
相关产品推荐
相关产品推荐

