2017-04-07 49 views
1

我目前正在开发一个Angular 2项目,我只需要调用特定的函数,并且只在页面上的所有元素都加载完毕后才能调用。我试图从Observable中使用eventFrom函数,它在我期待“点击”操作时工作,但是一旦我切换到“加载”它根本不会触发。接下来,我尝试使用Rxjs-DOM加载函数,但它没有消防要么Rxjs-DOM加载函数不激发角度2

下面是代码我现在所拥有的:

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元素都是ACTUALLY加载后才调用函数。

预先感谢您。

回答

1

尝试ngZone.run。它会让角度重新为最新的模型。

+0

thanx您的回复。我使用这个例子[https://blog.thoughtram.io/angular/2016/02/01/zones-in-angular-2.html],它似乎做我需要的工作。但是,这究竟是你的意思,还是我误解了一些东西? – CannotCode

+0

@ CannotCode是的,对于NgZone部分几乎是一样的。对于'异步调用',有时候它会通过调用'ngZone.run'退出角度区域或生命吊钩,让角度退出。 – Pengyy