0

我有一个 Angular 2 type-ahead 组件的以下代码:

this.question["input"] = new FormControl();
this.question["input"].valueChanges
        .debounceTime(400)
        .switchMap(term => this.question['callback'](term))
        .subscribe(
            data => {
                this.question["options"].length = 0;
                this.question["options"].push(...data);
            }
        );

效果很好,但是我正在尝试向此事件添加加载动画,即动画在 FormControl 的值更改时开始,并在返回数据时结束。

话虽如此,有没有办法使用如下代码进入这个方法链?

...
    .valueChanges
    /* Start Animation or Run Custom Function Here */
    .switchMap(term => /* Run AJAX Here */)
    .subscribe(
        data => {
            /* End Animation Here */
        }
    );
...

任何帮助表示赞赏。

4

2 回答 2

2

这尚未经过测试,但它类似于我在我的应用程序中使用的代码......希望它有所帮助:

this.question["input"] = new FormControl();
this.question["input"].valueChanges
  .debounceTime(400)
  .switchMap(term => this.question['callback'](term))
  .subscribe(
     data => {
        this.question["options"].length = 0;
        this.question["options"].push(...data);
        this.startAnimation();
     },
     () => {this.completeAnimation()}
  );

startAnimation() {
   //start animation code here
}

completeAnimation() {
   //complete the animation here.
}
于 2016-09-24T13:26:22.953 回答
0

事实证明,这真的很容易......要将自定义代码添加到开关映射中,您只需执行以下操作。

this.question["input"] = new FormControl();
this.question["input"].valueChanges
    .debounceTime(400)
    .switchMap(term => {
        // custom code can go here.
        this.customAnimationStart();
        return this.question['callback'](term);
    })
    .subscribe(
        data => {
            this.question["options"].length = 0;
            this.question["options"].push(...data);
        },
        failed => console.error("Request Failed", failed),
        () => this.customAnimationEnd()
    );

使我遇到这种尝试的技巧是return在您的功能之后提出请求。

于 2016-09-27T08:48:57.900 回答