承诺在Angular 4中设置类的参数后执行函数

时间:2018-11-26 14:21:43

标签: node.js angular asynchronous angular-promise

我有一个类,并且这个类有一个参数“ filter”。此类也接受输入filterChange。关于filterChange的更改,我想将filter设置为新值,然后执行将使用this.filter的函数。因为Angular 2是异步的,所以我想知道如何确保在sampleFunction运行之前过滤器将具有新值。什么是正确的方法?我正在考虑编写一个将this.filter设置为filterChange然后使用.then来调用sampleFunction的promise,但是看来我不能在Promise范围内使用“ this”。

export class StackOverFlowExample implements OnChanges{
   filter = 'default';
   constructor(){}
   @Input filterChange;

   ngOnChanges(){
      this.filter = this.filterChange;
      this.sampleFunction(); //how to make sure this gets the updated this.filter value?
   }

   sampleFunction(){
      //uses this.filter;
   }
}

另外,我知道我可以让sampleFunction接受一个过滤器值,并执行类似的操作:sampleFunction(this.filterChange),但这不是我想要的行为。

或者,Angular是否不像我想象的那么异步,因此这段代码还可以吗?

2 个答案:

答案 0 :(得分:1)

您可以使用设置/获取ES6方法来实现。

export class StackOverFlowExample implements OnChanges{
   filter = 'default';
   constructor(){}
   @Input filterChange;
   private previousValue;

   ngOnChanges(){}

   set filterChange(value){
     if(this.previousValue != value){
        this.filter = value;
        this.previousValue = this.filter;
      this.sampleFunction(); //how to make sure this gets the updated this.filter value?
     }
   }

   sampleFunction(){
      //uses this.filter;
   }
}

答案 1 :(得分:1)

简单,只要条件可行。比较Mutex方法中的previouscurrent

ngOnChanges