Angular模块监听deviceready事件

// 本服务设置了一个Angular模块监听deviceready事件。也可使用服务来监听
// deviceready事件,而后依赖于这个事件是否被触发来解析promise。
// 可使用这个CordovaService来肯定Cordova是否准备好了,事实上这里已经准备好了,并
// 且咱们还能够依赖于这个服务是否准备就绪来设置逻辑,使用方式以下:
// angular.module('myApp', ['fsCordova'])
//    .controller('MyController', function ($scope, CordovaService) {
//    CordovaService.ready.then(function () {
//        // 此时Cordova已经准备好了
//    });
// });
angular.module('fsCordova', [])
    .service('CordovaService', ['$document', '$q',
        function ($document, $q) {
            var d = $q.defer(),
                resolved = false;
            var self = this;
            this.ready = d.promise;
            document.addEventListener('deviceready', function () {
                resolved = true;
                d.resolve(window.cordova);
            });
            // 检查一下以确保没有漏掉这个事件(以防万一)
            setTimeout(function () {
                if (!resolved) {
                    if (window.cordova) {
                        d.resolve(window.cordova);
                    }
                }
            }, 3000);
        }
    ]);
相关文章
相关标签/搜索