使用角度保存科尔多瓦暂停应用程序状态

Posted

技术标签:

【中文标题】使用角度保存科尔多瓦暂停应用程序状态【英文标题】:Saving the application state on cordovas pause with angular 【发布时间】:2016-04-27 13:14:24 【问题描述】:

我在我的 android 设备上运行了一个 Cordova 应用程序,用于显示从网络服务检索到的一些新闻。当我使用 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 时未定义。也许该应用程序已经终止并被“垃圾收集”?有人可以证实我的怀疑还是我做错了什么?你是如何在你的应用程序中解决这个问题的?如有任何帮助,我将不胜感激!

【问题讨论】:

【参考方案1】:

当你在

中定义你的事件绑定时
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;
)();

你会期望得到一个函数引用,但在这里提升不会起作用,因为每个方法都是一个匿名函数的引用,而这些函数的原型字段还没有声明。

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

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

【讨论】:

以上是关于使用角度保存科尔多瓦暂停应用程序状态的主要内容,如果未能解决你的问题,请参考以下文章

为科尔多瓦定制 PushPlugin。 (适用于安卓)

加载页面之前的AngularJS自动登录

关闭后退按钮上的科尔多瓦应用程序

在不启用他们的位置的情况下在科尔多瓦上获取用户位置

未捕获异常的角度中断/暂停

如何从 cordova 应用程序将文件保存在内部存储中?