Angular 2父对子函数中的布尔值

时间:2018-04-12 12:19:44

标签: javascript angular typescript

我正在尝试从父组件发出布尔更改到子组件但没有运气。

父组件:

isActionComplete: boolean;

deleteUser() {
    this.userService.delete();
    this.isActionComplete = true;
    setTimeout(() => {
      this.isPopUpActive = false;
    }, 3000);
    this.isActionComplete = false;
  }

父html:

<app-pop-up [isActionComplete]="isActionComplete"></app-pop-up>

子组件:

@Input() isActionComplete: boolean;

儿童HTML:

<div *ngIf="isActionComplete">Complete</div>

如果我更改'isActionComplete:boolean;'到'isActionComplete = true;'它在父组件中确实改变了子布尔值的状态,但出于某种原因,当它在'deleteUser'函数中时它不起作用。

请有人让我知道我哪里出错?

由于

2 个答案:

答案 0 :(得分:1)

属性绑定的Synatx是[prop]="value"

<app-pop-up [isActionComplete]="isActionComplete"></app-pop-up>

你需要移动setTimeout();内的最后一个语句setTimeout()不会阻止执行而是将setTimeout中的方法或语句移动到事件队列,并在执行块后的超时和语句上执行同时。

示例:

method a();
setTimeout(()=>{method b()},0})
methhod c();

执行顺序为
a();
c();
b();

 deleteUser() {
        this.userService.delete();
        this.isActionComplete = true;
        setTimeout(() => {
          this.isPopUpActive = false;
         this.isActionComplete = false;
        }, 3000);

      }

答案 1 :(得分:1)

我意识到我的问题是什么!导致问题的是setTimeout。我需要把它移到里面:

deleteUser() {
    this.userService.delete();
    this.isActionComplete = true;
    setTimeout(() => {
      this.isPopUpActive = false;
      this.isActionComplete = false;
    }, 3000);
  }

希望将来帮助某人!