【问题标题】:Open and close a component Angular 4 it is not working as excepted打开和关闭组件 Angular 4 它不能正常工作
【发布时间】:2018-07-23 18:31:16
【问题描述】:

我已经创建了一个类似弹出窗口的组件,但我在那里遇到了问题。 当我打开此组件然后单击取消时,它会隐藏,但是我需要单击 2 次编辑才能再次打开该组件,如果我单击以编辑一个项目并在弹出窗口中单击取消,然后再单击一个来编辑它们,它们都处于活动状态. 如果有人不理解问题,请在评论中写下或提出编辑建议。

这是我的代码。

这是父组件

<app-edit-dialog-vi *ngIf="showChild" [data]="dataToPass" [showMePartially]="showChild"></app-edit-dialog-vi>
<div class="dropdown-menu-item" (click)="edit({valueItem: valueItem})">{{'button.#edit'|translate}}</div>


 <div [class]="'name-block name-block-width-' + valueItem.level" [ngClass]="{active: activeSelected === valueItem.id}" (click)="toggleExpand()">
    {{valueItem.name}} </div>


showChild = false;
activeSelected: any = '';

edit(editOptions: EditViOptions) {
  this.showChild = !this.showChild;
  console.log(this.showChild, '##');
  if (editOptions.valueItem || editOptions.appendToParentId) {
    this.dataToPass = editOptions;
    this.activeSelected = editOptions.valueItem.id;
  }
}

这是弹出窗口

<div *ngIf="showMePartially" class="container">
</div>

  @Input() showMePartially = true;
  @Input() data: EditViOptions = null;


cancel() {
    this.showMePartially = false;

  }

【问题讨论】:

    标签: html css angular typescript


    【解决方案1】:

    您需要 2 路绑定来部分显示:

    <app-edit-dialog-vi *ngIf="showChild" [data]="dataToPass" [(showChild)]="showChild" (emitToRemove)="activeTab = 0"></app-edit-dialog-vi>
    edit(editOptions: EditViOptions) {
      this.showChild = true;
    }
    

    在此组件中,您在点击时将showMePartially 设置为true

    然后在弹出组件中,你有输入和输出:

    @Input() showChild: boolean;
    @Output() showChildChange = new EventEmitter<boolean>();
    

    然后关闭:

    this.showChildChange.emit(false)
    

    用于更改所选项目:

    <div click="changeTab(1)" *ngIf="activeTab === 1">First Active</div>
    <div click="changeTab(2)" *ngIf="activeTab === 2">Second Active</div>
    
    activeTab = 1;
    changeTab(active){
      this.activeTab = active;
    }
    

    如果您在关闭弹出窗口时需要更改或删除活动状态,请在关闭时发出一些东西:

    @Output() emitToRemove = new EventEmitter();
    

    我在开始监听器的代码中添加了输出。

    【讨论】:

    • 它正在工作,但我在这里有另一个问题,如果我编辑编辑的 ID 是活动的,但如果我点击取消并且有另一个 ID 来编辑它们都是活动的。我将代码更改为更具体
    • @ZhuniqiA 我不确定我明白你想说什么:)
    • 我已经更改了代码,所以当我单击以编辑父项中的项目时会更改样式,但是当我在弹出窗口中单击 cnacel 时,在父项中另一个项目试图编辑最后一个和这个新的编辑处于活动状态,我怎么能只让一个处于活动状态
    • @ZhuniqiA 编辑了我的答案,试试看,保留你的代码进行编辑,只需更改 showChild 变量
    • 但是我已经要求了activeSelected,或者我没有很好地理解你的答案?
    猜你喜欢
    • 2017-01-28
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-02
    • 2021-08-09
    • 1970-01-01
    相关资源
    最近更新 更多