首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问ng-container中的子组件变量

访问ng-container中的子组件变量
EN

Stack Overflow用户
提问于 2019-03-26 00:46:25
回答 2查看 2.2K关注 0票数 2

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

使用ng-container或ng-template可以做到这一点吗?或者我应该完全采用另一种方法?

父组件

代码语言:javascript
复制
    <suggestion-list (suggestionSelected)="selectSuggestion($event)" [$suggestions]="$suggestionSource">
      <ng-container>
        {{suggestion.firstname + ' ' + suggestion.lastname}}
      <ng-container>
    </suggestion-list>

子组件

代码语言:javascript
复制
  <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>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-26 01:03:58

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

父组件:

代码语言:javascript
复制
<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的隐式上下文传递了模板中的suggestion var

代码语言:javascript
复制
<ng-container *ngFor="let suggestion of suggestions>
    <ng-container *ngTemplateOutlet="suggestionTemplate; context: {$implicit: suggestion}"></ng-container>
</ng-container>

在子组件的.ts文件中,您可以像这样声明传入的模板:

代码语言:javascript
复制
@Input() suggestionTemplate: TemplateRef<any>;

PS:我现在已经写了这段代码,所以它没有经过测试,但我想你可以知道你能做什么!

票数 1
EN

Stack Overflow用户

发布于 2019-03-26 00:51:40

Here就是一个工作示例

parent.component.html

代码语言:javascript
复制
   <div>
     <suggestion-list (suggestionSelected)="selectSuggestion($event)" [$suggestions]="$suggestionSource">
       <p>{{suggestion.firstname + ' ' + suggestion.lastname}}</p>
     </suggestion-list>
   </div>

child.component.html

代码语言:javascript
复制
   <div>
     <ng-content></ng-content>
     <p>Hello !</p>
   </div>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55342690

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档