【问题标题】:ngIf show based on dropdown value - Angular 2ngIf 基于下拉值显示 - Angular 2
【发布时间】:2017-09-17 23:51:09
【问题描述】:

我有一个包含几个不同组件的父组件。 在“项目”组件(子)中,我有下拉列表,用户可以从中选择任何可用的项目。

当从下拉列表中选择任何项目时,我需要使用 ngIf 创建其他组件。

从这里你可以看到,我已经将 ngIf 放在了我想要受影响的组件的父组件中。

<div class="tab tab-style">

<ribbon-item style="width:10%;" [title]="'Load/Save Project'">
    <project></project>
</ribbon-item>
<div class="ribbon-divider"></div>

<ribbon-item style="width:12%;" [title]="'Project settings'" *ngIf="showComponent">
    <project-settings></project-settings>
</ribbon-item>
<div class="ribbon-divider"></div>

<ribbon-item style="width:23%;" [title]="'Environment'" *ngIf="showComponent">
    <environment></environment>
</ribbon-item>
<div class="ribbon-divider"></div>

<ribbon-item class="pd-width" [title]="'Project dates'" *ngIf="showComponent">
    <project-dates></project-dates>
</ribbon-item>
<div class="ribbon-divider"></div>

这是带有下拉菜单的“项目”组件。

<div class="button-wrapper">
<select #projectSelect class="custom-select custom-select-project" (change)="loadProject(projectSelect.value)">
    <option selected disabled>Open projects</option>
    <option *ngFor="let project of projects" [value]=project.id>{{project.name}}</option>
</select>

<button class="btn-main" (click)="createNewProject()">New project</button>
<button class="btn-main">Save project</button> 
<button class="btn-main">Save as</button>

如何检查用户何时选择任何项目,然后在父级中显示其他组件。

【问题讨论】:

  • 您有不同的子组件(所有兄弟组件),如果其中一个子组件中的下拉菜单具有特定值,您希望显示这些子组件,对吗?
  • 是的,就这样:)

标签: angular dropdown angular-ng-if


【解决方案1】:

您可以使用项目组件的输出。 流程将如下定义:

步骤 1。项目组件的父组件更改为:

 `<project (projectSelected) = "projectSelected($event)"></Project>`

第 2 步:在您的项目组件中将输出变量定义为:

@Output() projectSelected: EventEmitter<number> = new EventEmitter<number>();

第 3 步:在 loadProject 中添加以下行:

this.projectSelected.emit(id); // selected value from dropdown

第四步:在父组件中定义函数为:

projectSelected(projectId) {
 this.showComponent = true;
}

【讨论】:

  • ...这样可以吗? loadProject( id ) { this.projectService.getById( id ).subscribe( response =&gt; { this.projectService.projectLoaded$.emit( response ) }, error =&gt; { console.error( error ); } ); this.answerChanged.emit($event.value); }我收到错误,未定义 answerChanged 并且找不到名称 '$event' @pritesh agrawal
  • 我的错误是我从我的本地代码中复制了你的 addAswer,它应该是 projectSelected ,你也可以使用 id 。我更新了答案。
  • 如果我想做同样的事情,但要隐藏其他组件,那不是兄弟,我应该改变什么?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多