ng-template中let指令使用异常咨询:现有代码无法运行
解决ng-template中let指令的使用问题
你的代码存在几个关键问题,以下是具体修复思路:
1. 修正变量拼写错误
HTML里的{{cpntact.name}}是笔误,必须改成{{contact.name}},否则会因找不到变量触发报错。
2. 正确传递ng-template的上下文
ng-template本身不会自动渲染,必须通过结构型指令或手动方式传递上下文数据,let指令才能拿到对应值:
方式一:用*ngFor遍历数组(最常用)
因为你的contacts是数组,需要遍历每个元素,可直接用ngFor结合ng-template:
<ng-template ngFor let-contact [ngForOf]="contacts"> {{contact.name}} </ng-template>
或者用更简洁的语法糖形式:
<div *ngFor="let contact of contacts"> {{contact.name}} </div>
方式二:手动通过ViewContainerRef渲染
如果需要更灵活的控制,可在组件类中手动创建视图并传递上下文:
组件TS代码:
import { Component, TemplateRef, ViewContainerRef, OnInit } from '@angular/core'; interface Contact { id: string; name: string; adresse: string; } @Component({ selector: 'app-your-component', templateUrl: './your-component.component.html' }) export class YourComponent implements OnInit { contacts: Contact[] = [ {id: '1', name: '张三', adresse: '北京市'}, {id: '2', name: '李四', adresse: '上海市'} ]; constructor(private templateRef: TemplateRef<any>, private vcr: ViewContainerRef) {} ngOnInit() { this.contacts.forEach(contact => { // 传递上下文,$implicit是默认的隐含变量 this.vcr.createEmbeddedView(this.templateRef, { $implicit: contact }); }); } }
对应的HTML:
<ng-template let-contact> {{contact.name}} </ng-template>
如果要自定义上下文键名,比如let-contact="myContact",则创建视图时要写成:
this.vcr.createEmbeddedView(this.templateRef, { myContact: contact });
3. 确保contacts数组有初始化数据
你的TS代码只声明了contacts: Contact[];,但没有赋值,需要初始化数组(比如上面示例中的数据),否则即使渲染也看不到内容。
内容的提问来源于stack exchange,提问作者user1938143
相关产品推荐
相关产品推荐

