2017-04-07 66 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