2016-01-21 23 views
0

我有一個cordova應用程序運行在我的android設備上,以顯示從Web服務檢索到的一些消息。由於我使用的打字稿和角度我有一個服務握着我的消息,像這樣:保存應用程序狀態在cordovas暫停與角

class NewsService { 
    news: News[]; 
} 

我想,以節省科爾多瓦的暫停事件的消息,讓我建立了一個服務要做到這一點,注入到我NewsService,並增加了事件處理程序與相應的回調:

static $inject = ["$http", "newsApp.LocalStorageService"]; 
constructor(private $http: ng.IHttpService, private storageService: IStorageService) { 
    document.addEventListener('pause', saveNews, false); 
} 

saveNews(){ 
    this.storageService.save(this.news); 
} 

我的問題是this.storageServciesaveNews - 方法被調用的時間不確定。也許應用程序已經終止,並被「垃圾收集」?任何人都可以證實我的懷疑,或者有什麼我做錯了嗎?你是如何在你的應用程序中解決這個問題的?我會很感激任何幫助!

回答

1

當你定義在

document.addEventListener('pause', this.saveNews, false); 

你的方法你的事件綁定簡直是尚未宣佈。看看這個打字稿例如:

class Test { 
    greeting: string; 
    constructor(message: string) { 
     console.log(greet) 
    } 
    greet() { 
     return "Hello, " + this.greeting; 
    } 
} 

它transpiles到這個JavaScript:

var Test = (function() { 
    function Test(message) { 
     console.log(greet); 
    } 
    Test.prototype.greet = function() { 
     return "Hello, " + this.greeting; 
    }; 
    return Test; 
})(); 

你希望得到一個函數引用,但提升不會在這裏工作,因爲每一個方法是參考對於匿名函數而言,這些函數的原型字段根本沒有聲明。

將其封裝在一個lambda函數將工作:

document.addEventListener('pause',()=>this.saveNews(), false);