【问题标题】: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 时未定义。也许该应用程序已经终止并被“垃圾收集”?有人可以证实我的怀疑还是我做错了什么?你是如何在你的应用程序中解决这个问题的?如有任何帮助,我将不胜感激!

【问题讨论】:

    标签: javascript android angularjs cordova dom-events


    【解决方案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);
    

    【讨论】:

      猜你喜欢
      • 2017-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-06
      • 1970-01-01
      • 1970-01-01
      • 2018-01-11
      • 1970-01-01
      相关资源
      最近更新 更多