angular - 在 ng-container 中访问子组件变量

标签 angular ng-template ng-content

我有一个名为 Suggestion List 的自定义组件,它向用户显示来自可观察对象的建议列表。我已经尽可能通用地创建了这个组件,这样你就可以传递任何数据数组,所以我希望能够从父级自定义它的显示,因为我永远不知道对象会是什么样子,直到实现它。不幸的是,我无法从 ng-container 中的父组件访问子组件变量。

使用 ng-container 或 ng-template 是否可行,还是我应该完全采用另一条路线?

父组件

    <suggestion-list (suggestionSelected)="selectSuggestion($event)" [$suggestions]="$suggestionSource">
      <ng-container>
        {{suggestion.firstname + ' ' + suggestion.lastname}}
      <ng-container>
    </suggestion-list>

子组件

  <mat-list role="list">
    <mat-list-item *ngFor="let suggestion of $suggestions | async">
      <mat-icon mat-list-icon>person</mat-icon>
      <mat-card (click)="selectSuggestion(suggestion)">
        <ng-container></ng-container>
      </mat-card>
    </mat-list-item>
  </mat-list>

最佳答案

一种方法是使用 ng-template。您可以为父组件中的每个元素定义一个模板,并为数组中的每个元素在子组件中显示该模板:

父组件:

<suggestion-list (suggestionSelected)="selectSuggestion($event)" 
                 [suggestions]="$suggestionSource | async" 
                 [suggestionTemplate]="suggestionTemplate">
</suggestion-list>

<ng-template #suggestionTemplate let-suggestion>
<span>{{suggestion.firstname + ' ' + suggestion.lastname}}</span>
</ng-template>

在您的子组件中,您可以这样做(注意我们通过 ng-template 的隐式上下文在模板中传递建议变量:

<ng-container *ngFor="let suggestion of suggestions>
    <ng-container *ngTemplateOutlet="suggestionTemplate; context: {$implicit: suggestion}"></ng-container>
</ng-container>

在子组件的.ts文件中,声明传入的模板如下:

@Input() suggestionTemplate: TemplateRef<any>;

PS:这段代码是我现在写的,所以还没有测试,但我想你可以知道你能做什么!

关于angular - 在 ng-container 中访问子组件变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55342690/

相关文章:

angular - 如何在按钮标签angular2中测试routerLink

file - Angular2 中静态文件的默认路径是什么?

angular - 如何在自定义组件中使用 DxTemplate

Angular 组件动态编译 - ng-content 与选择不工作

html - 迭代 ng-content 项目并将每个项目包装在它自己的嵌套 div 中

javascript - 类型 'void' 不可分配给类型 'FormData'

javascript - 如何在 Angular 6 中手动和以编程方式区分 URL 更改?

javascript - 如何将 @ViewChild 与外部 ng 模板一起使用(Angular 11)

Angular 6 表单数组无法在 ng-container 内访问

angular - 在 <ng-template> 中添加动态内容