使用 angular 在 cordova pause 上保存应用程序状态

Saving the application state on cordovas pause with angular

我的 Android 设备上有一个 Cordova 应用程序 运行,用于显示从 Web 服务检索到的一些新闻。当我使用 Typescript 和 Angular 时,我有一个服务可以保存我的新闻:

class NewsService {
    news: News[];
}

我想将这些新闻保存在 Cordova 的暂停事件中,因此我构建了一个服务来执行此操作,将其注入到我的 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.storageServcie 在调用 saveNews-Method 时未定义。也许该应用程序已经终止并处于 "garbage collected"?任何人都可以证实我的怀疑或者我做错了什么吗?你是如何在你的应用程序中解决这个问题的?如果有任何帮助,我将不胜感激!

当您在

中定义事件绑定时
document.addEventListener('pause', this.saveNews, false);

您的方法尚未声明。看看这个 TypeScript 示例:

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

它转换成这个 JavaScript:

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

您可能希望得到一个 function-reference,但提升在这里不起作用,因为每个方法都是对匿名函数的引用,而这些函数的 prototype-fields 还没有声明。

将其封装在 lambda 函数中即可:

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