ionicPlatform.ready()函数使用服务工厂

时间:2014-05-20 08:40:32

标签: javascript angularjs ionic-framework

在我的app.js中我有这个方法:

  .run(function($ionicPlatform) {
     $ionicPlatform.ready(function() {

        gvi.Notifications.registerForPush(MessagesService.onNotificationResponse);

     });
  })

还有一家工厂:

  .factory('MessagesService', function($scope, $q) {

var messages = [];

    return {

  onNotificationResponse: function(sender, message, msgId, msgType, msgUrl) {
        console.log("myApp.onNotificationResponse:" + message + " msgUrl:" + msgUrl);

        $scope.messages.push({
          sender: sender,
          message: message,
          msgId: msgId,
          msgType: msgType,
          msgUrl: msgUrl
        });

      MessagesService.save($scope.messages);

    },
  }
 })

当我打开应用程序时,出现此错误:

  Uncaught ReferenceError: MessagesService is not defined

如何在ionicPlatform.ready函数中使用MessagesService工厂?

编辑:

我修复了MessagesService错误,现在如何在工厂中使用$ scope?

1 个答案:

答案 0 :(得分:3)

您尚未在运行

中传递MessageService依赖项
.run(function($ionicPlatform,MessagesService) {
     $ionicPlatform.ready(function() {

        gvi.Notifications.registerForPush(MessagesService.onNotificationResponse);

     });
  })

更新:根据您的要求,您需要重构您的服务,因为服务无法引用范围。 您的服务应该将消息数组公开到范围,而不是使用在范围上定义的那个。

 .factory('MessagesService', function($scope, $q) {

var messages = [];

    return {

  onNotificationResponse: function(sender, message, msgId, msgType, msgUrl) {
        console.log("myApp.onNotificationResponse:" + message + " msgUrl:" + msgUrl);

        messages.push({
          sender: sender,
          message: message,
          msgId: msgId,
          msgType: msgType,
          msgUrl: msgUrl
        });

      MessagesService.save(messages);

    },
    messages:messages
  }
 })

现在,您可以使用MessageService.messages属性在任何控制器中引用此消息集合。