2014-01-20 32 views
1

我试图根据devgirls post在Angular工厂包装PushPlugin,但目前为止没有成功。Angular工厂的Phonegap/Cordova函数

angular.module('phonegap', []) 
    .factory('phonegapReady', function ($rootScope, $q) { 
    var loadingDeferred = $q.defer(); 

    document.addEventListener('deviceready', function() { 
     $rootScope.$apply(loadingDeferred.resolve); 
    }); 

    return function phonegapReady() { 
     return loadingDeferred.promise; 
    }; 
    }) 
    .factory('push', function ($rootScope, phonegapReady) { 
    return { 
     registerPush: phonegapReady().then(function (onSuccess, onError) {  

     // stripped handlers 

     if (device.platform === 'android' || device.platform === 'Android') { 
      pushNotification.register(
      function() { 
       var that = this, 
       args = arguments; 

       if (onSuccess) { 
       $rootScope.$apply(function() { 
        onSuccess.apply(that, args); 
       }); 
       } 
      }, 
      function() { 
       var that = this, 
       args = { 
        'senderID': '123', 
        'ecb': 'onNotificationGCM' 
       }; 

       if (onError) { 
       $rootScope.$apply(function() { 
        onError.apply(that, args); 
       }); 
       } 
      } 
     ); 
     } else { 
      pushNotification.register(
      function() { 
       var that = this, 
       args = arguments; 

       if (onSuccess) { 
       $rootScope.$apply(function() { 
        onSuccess.apply(that, args); 
       }); 
       } 
      }, 
      function() { 
       var that = this, 
       args = { 
        'badge': 'true', 
        'sound': 'true', 
        'alert': 'true', 
        'ecb': 'onNotificationAPN' 
       }; 

       if (onError) { 
       $rootScope.$apply(function() { 
        onError.apply(that, args); 
       }); 
       } 
      } 
     ); 
     } 
     }) 
    }; 
    }); 

得到一个错误:

TypeError: '[object Object]' is not a function (evaluating 'e.registerPush(function(a){console.log("fun"),console.log(a)})') 

我在做什么错?

回答

2

当您在承诺上致电then时,它会返回承诺,以便您可以链接回调。

我认为包装registerPush与函数会工作,如:

registerPush: function(onSuccess, onError) { 
    phonegapReady().then(function() { 
     // Do something with closured onSuccess and onError 
    }); 
},..