ng-container、ng-template之解决*ngFor与*ngIf同一标签内报错问题

当在Angular项目中需要同时使用ngFor和ngIf时,直接放置在同一标签会导致错误。ng-container和ng-template提供了解决方案。ng-container作为一个逻辑容器,不会在DOM树中显示,用于减少嵌套。ng-template则是一个不会直接显示的元素,其内容需要经过处理才能渲染。在ng-template中加入ngIf指令,可以理解其为一个Angular元素,被替换为注释节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目中的特殊场景,需要同时使用ngFor和ngIf,如果同时放在一个标签内会报如下错误:

ERROR Error: Uncaught (in promise): Error: Template parse errors:
Can't have multiple template bindings on one element. 
Use only one attribute prefixed with * ("ange)="setFont($event.target.value);">

此时ng-container和ng-template上场,介绍下该嘉宾的功能,即:“不存在”的功能。瓦特?没有代码的解释都是耍流氓,代码走起:

<ng-container>
     <p> hello, I want some 靠海别墅s(低调,低调)</p>
</ng-container>

chrome中运行后查看代码
在这里插入图片描述
本人:“二营长,你TN的 ng-container 呢 ?”
ng-container一脸鄙视: “ 我存在的意义就是不存在 !”
“哦? 来秀一秀”

<ng-container *ngFor="let item of cornerInfosLeftTop">
    <span class=""  *ngIf="model.tag == 'transverse'">
        {
  
  {item.infoName}}:
    </span>
    <br>
</ng-container>

输出结果:

对不起,我理解错了您的要求。要使用ng-template来调用方法,您可以按照以下步骤操作: 1. 在组件中声明一个TemplateRef变量,并将其注入到构造函数中。例如: ```typescript constructor(private templateRef: TemplateRef<any>) { } ``` 2. 在模板中使用ng-template,并将其绑定到一个变量上。例如: ```html <ng-template #myTemplate> <button (click)="myMethod()">调用方法</button> </ng-template> ``` 3. 在组件中定义一个方法,该方法将使用ViewContainerRef来创建一个嵌入视图,并将ng-template作为参数传递给createEmbeddedView方法。例如: ```typescript import { ViewContainerRef } from '@angular/core'; myMethod() { this.viewContainerRef.clear(); this.viewContainerRef.createEmbeddedView(this.templateRef); } ``` 请注意,我还添加了`ViewContainerRef`作为依赖注入,并在`myMethod`方法中使用了`clear`方法来清除视图容器中的任何现有内容。 4. 在组件的模板中,使用`ng-container`来放置嵌入视图。例如: ```html <ng-container #container></ng-container> ``` 5. 在组件的类中,使用ViewChild装饰器来获取`ViewContainerRef`的引用。例如: ```typescript @ViewChild('container', { read: ViewContainerRef }) viewContainerRef: ViewContainerRef; ``` 这样,当调用`myMethod()`方法时,将会创建一个嵌入视图,并将ng-template的内容插入到`ng-container`中。 希望这样能满足您的要求!如果您还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值