角。如何使用observable?

时间:2018-01-12 15:36:26

标签: angular typescript

这个问题似乎被广泛讨论,但我找不到如何正确实施。

我在Component中有两个可以并行运行的方法,所以我现在有一个计时问题。如何使用observable(或promise)来确保在onCollapse()之后运行ngAfterViewChecked()?

组件

@Component
export class MyClass implements AfterViewChecked{
    ngAfterViewChecked() {
        ...
    }

    onCollapse(index: number) {
        ...
    }
}

HTML

<div class="collapse_section" *ngFor="let event of event_role; let i = index" #jobBody>
    <header accordion-heading (click)="onCollapse(i)" [attr.aria-expanded]="!isCollapsed">
        ...
    </header>
</div>

更新1 要明确我在这里做的事情:

这个想法是当用户点击时,onCollapse被调用并且某些div变得可见,但它可能在屏幕外。然后为了让它出现在屏幕上,我想在ngAfterViewChecked调用中滚动。我无法在onCollapse()中滚动,因为视图未在此处理程序范围内更新。

更新2

可能我根本不需要ngAfterViewChecked,它可能是其他方法。我只是想将窗口滚动到底部,一旦所有DOM操作都由点击完成引起。是否可以使用Observable和(click)事件处理程序?

1 个答案:

答案 0 :(得分:0)

ngAfterViewChecked()做了哪些工作?如果它执行一些返回promise的异步调用,你可以这样做:

ngAfterViewChecked() {
this.someAsynchronousCall()
.then(() => this.onCollapse(index));
}

如果您的异步调用返回一个observable,那么您可以这样做,

ngAfterViewChecked() {
this.someAsynchronousCallThatReturnsObservable()
.toPromise()
.then(() => this.onCollapse(index));
}