2017-10-21 97 views
0

我遇到了問題,即如果通過事件lisitener事件推送Ionic Page時,數據綁定會中斷。Angular 4雙向數據綁定與EventListener中斷

ionViewDidLoad() { 
document.addEventListener('admob.rewardvideo.events.REWARD',() => { 
    this.goToScriptedGame(); 
}); 

用戶在可以訪問該頁面之前必須觀看廣告視頻。

不幸的是,所有雙向綁定(如{{title}})都不再改變,它們只顯示初始值。

我發現,如果按下「設備」後退按鈕(在某個點被禁用),數值顯示正確。

變量themself都是正確的,一切工作正常,但它只是破損的綁定。

回答

1

當您想通過document.addEventListener綁定事件時,您需要手動觸發更改檢測,否則角度不知道它。

您可能正在尋找ApplicationRef#tick(),這將觸發完整的組件樹更改檢測。

import { ApplicationRef } from '@angular/core'; 

constructor(private appRef: ApplicationRef) {} 

ionViewDidLoad() { 
    document.addEventListener('admob.rewardvideo.events.REWARD',() => { 
    this.goToScriptedGame(); 
    this.appRef.tick(); 
    }); 
} 

更多的信息和其他的可能性見這個問題:Triggering Angular2 change detection manually

1
import { Component, NgZone } from '@angular/core'; 

constructor(public zone: NgZone) {} 

ionViewDidLoad() { 
document.addEventListener('admob.rewardvideo.events.REWARD',() => { 
    this.zone.run(() => 
    this.navCtrl.push("ScriptedPage") 
); 
}); 

NgZone使得它完美的我!感謝您鏈接到這篇文章,我發現它。

您提供的解決方案效果不好,但這個想法是正確的。