【问题标题】:Rxjs-DOM load function does not fire angular 2Rxjs-DOM 加载功能不会触发 Angular 2
【发布时间】:2017-09-02 11:46:41
【问题描述】:

我目前正在开发一个 Angular 2 项目,我只需要在页面上的所有元素都加载后才需要调用特定的函数。我尝试使用 Observable 中的 eventFrom 函数,当我期待“点击”操作时它起作用了,但是一旦我切换到“加载”它根本没有触发。接下来我尝试使用 Rxjs-DOM 加载函数,但它没有也可以开火。

这是我现在拥有的代码:

ngAfterViewInit(): void {
  let input = this.container.nativeElement.getElementsByClassName('list-item');

  let source = Rx.DOM.load(input);

  let subscription = source.subscribe((x) => {
      console.log('Next!');
    },
    (err) => {
      console.log('Error: ' + err);
    },
    () => {
      let temp = this.container.nativeElement.getElementsByClassName('list-item');
      console.log(temp.length);
    });

}
<div class="list-wrapper">
  <div class="list">
    <div class="list-item" *ngFor="let item of items">
      <img src={{item.image}} alt="{{item.title}}">
    </div>
  </div>
</div>
 "@angular/core": "4.0.1",
    "@types/rx-dom": "^7.0.0",
    "angular2-infinite-scroll": "0.3.4",
    "gulp-run": "1.7.1",
    "rxjs": "5.2.1-smooth"

temp.length 始终为 0。 如果我在那里设置timeout,它将完美地工作,因为所有元素都需要 2-3 秒才能加载,然后temp 不为空。但是在这种情况下超时是不可取的。 有什么我做错了吗? 另一个问题是,Angular 2 中是否还有其他方法可以仅在所有 dom 元素都实际加载后调用函数。

提前谢谢你。

【问题讨论】:

    标签: angular rxjs-dom


    【解决方案1】:

    试试ngZone.run。它将让角度重新渲染为最新模型。

    【讨论】:

    • 感谢您的回复。我使用了这个示例 [blog.thoughtram.io/angular/2016/02/01/zones-in-angular-2.html],它似乎完成了我需要的工作。但这正是你的意思,还是我误解了什么?
    • @CannotCode 是的,NgZone 部分几乎相同。对于Asynchronous calls,有时它会超出 angular 的 zone 或 lifehook,调用 ngZone.run 会让 angular 重新渲染。
    猜你喜欢
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 2019-12-02
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    相关资源
    最近更新 更多