Угловой сервис не инициализируется

0

У меня есть служба проверки подлинности пользователя для перенаправления на логин или зарегистрированную область.

services.js:

var servicesModule = angular.module('servicesModule', []);

servicesModule.service('loginService', ['$state', function($state){

    console.log('Inside');

    var ref = new Firebase("https://feedback-system.firebaseio.com/");
    var authData = ref.getAuth();

    console.log('Inside');

    if (authData) {


      $state.go('tabs.courses');
      console.log("User " + authData.uid + " is logged in with " + authData.provider);

    } else {

      $state.go('login');
    }

}]);

контроллер:

var ionicApp = angular.module('feedback-system', ['ionic', 'firebase', 'servicesModule', 'coursesModule', 'feedbackModule', 'loginModule', 'tabsModule']);

ionicApp.run(function($ionicPlatform, $state) {
  $ionicPlatform.ready(function() {
    // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
    // for form inputs)
    if(window.cordova && window.cordova.plugins.Keyboard) {
      cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
    }
    if(window.StatusBar) {
      StatusBar.styleDefault();
    }
  });
});

ionicApp.config(function($stateProvider, $urlRouterProvider) {
  $stateProvider

  .state('login', {
    url: '/login',
    templateUrl: 'views/login.html',
    controller: 'loginCtrl'
  })

  .state('tabs', {
    url: '/tabs',
    abstract: true,
    templateUrl: 'views/main.html',
    controller: 'tabsCtrl'
  })

  .state('tabs.courses', {
    url: '/courses',
    views:{
      'coursesView':{    
        templateUrl: 'views/courses.html',
        controller: 'coursesCtrl'
      }
    }
  })

  .state('tabs.feedback', {
    url: '/feedback',
    views:{
      'feedbackView':{
        templateUrl: 'views/feedback.html',
        controller: 'feedbackCtrl'
      }
    }
  })

  .state('tabs.notifications', {
    url: '/notifications',
    views:{
      'notificationsView':{
        templateUrl: 'views/notification.html',
        controller: 'notificationCtrl'
      }
    }
  });

  $urlRouterProvider.otherwise("/courses");
});

index.html:

<!DOCTYPE html>
<html ng-app="feedback-system">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
    <title></title>

    <link href="lib/ionic/css/ionic.css" rel="stylesheet">
    <link href="css/style.css" rel="stylesheet">

    <!-- IF using Sass (run gulp sass first), then uncomment below and remove the CSS includes above
    <link href="css/ionic.app.css" rel="stylesheet">
    -->

    <!-- ionic/angularjs js -->
    <script src="lib/ionic/js/ionic.bundle.js"></script>

    <!-- cordova script (this will be a 404 during development) -->
    <script src="lib/ngcordova/dist/ng-cordova.js"></script>
    <script src="cordova.js"></script>

    <!-- Firebase -->

    <script src="https://cdn.firebase.com/js/client/2.2.7/firebase.js"></script>
    <script src="lib/angularfire.min.js"></script>

    <!-- Services -->

    <script src="js/services/services.js"></script>

    <!-- Controllers -->

    <script src="js/controllers/loginCtrl.js"></script>
    <script src="js/controllers/coursesCtrl.js"></script>
    <script src="js/controllers/feedbackCtrl.js"></script>
    <script src="js/controllers/tabsCtrl.js"></script>

    <!-- Application -->

    <script src="js/app.js"></script>

  </head>
  <body>
    <ion-nav-view></ion-nav-view>    
  </body>
</html>

Я вставляю его в основной модуль app.js и index.html, ошибки вообще нет, но ничего не происходит, ничего не записывает в консоли. Любая идея, почему этот servies.js не выполняется?

Обновить:

Извините, я забыл упомянуть, что эта служба работала точно так, как сейчас, без какого-либо возврата раньше, она просто перестала работать сегодня.

Теги:
ionic-framework
angularjs-service
ionic

2 ответа

1

Я думаю, что ваша служебная декларация пошла не так. оберните содержимое внутри службы в функциональный блок возврата.

servicesModule.service('loginService', ['$state', function($state){

    return function() {
        console.log('Inside');

        var ref = new Firebase("https://feedback-system.firebaseio.com/");
        var authData = ref.getAuth();

        console.log('Inside');

        if (authData) {


          $state.go('tabs.courses');
          console.log("User " + authData.uid + " is logged in with " + authData.provider);

        } else {

          $state.go('login');
        }
    }

}]);

в контроллере

servicesModule.controller('loginController', ['$scope', 'loginService', function($scope, loginService){

       loginService();

}]);
  • 0
    Вы не возвращаете функцию в сервис, фабрика используется для этого, я думаю, поправьте меня, если я ошибаюсь
  • 0
    @Faizan, фабрика возвращает все, что вы хотите (массив, функция, простой объект, строка). Служба возвращает new функцию ed. Этот ответ правильный.
0

Сделай это,

var servicesModule = angular.module('servicesModule', []);

servicesModule.service('loginService', ['$state', '$firebaseAuth', '$firebase',  function($state,$firebaseAuth ,$firebase ){

return function() {
    console.log('Inside');

    var ref = new Firebase("https://feedback-system.firebaseio.com/");
    var authData = $firebaseAuth(ref);

    console.log('Inside');

    if (authData) {


      $state.go('tabs.courses');
      console.log("User " + authData.uid + " is logged in with " + authData.provider);

    } else {

      $state.go('login');
    }
}
}]);

Внесите $firebaseAuth и $firebase и попробуйте. Также вы можете показать контроллер и как вы вводите эту службу в index.html?

  • 0
    я не добавил контроллер, так как он немного длинный, и не думал, что будет необходимо, чтобы, поскольку служба должна просто выполнить по крайней мере один раз при запуске приложения, я попробую решение, которое вы предложили, но моя точка зрения была даже первой строкой console.log не запускать, значит сервис просто не виден.
  • 0
    Конечно, попробуйте ввести $firebaseAuth и $firebase как упомянуто выше. О, я не понял одну фундаментальную вещь, вы должны вернуть что-то из сервиса, это цель и дизайн в целом! Я изменю свой ответ
Показать ещё 13 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню