AngularJS не может получить объект авторизации из сервиса в функции разрешения

0

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

Проблема заключается в том, что строка uid вызывает ошибку, поскольку states.getAuth() не определена. states.getAuth() должен (и делает) возвращать информацию аутентификации о пользователе при использовании его с моих контроллеров, но при его использовании в этом решении это не по какой-то причине.

Неужели я об этом совершенно не так? Мне никогда не приходилось так долго разрешать, чтобы я не знал, что некоторые рекомендации будут отличными.

Дайте мне знать, нужно ли мне включать какие-либо из моих услуг или если этот фрагмент маршрута достаточно, чтобы найти решение.

.when('/programs/:program', {
  templateUrl: 'views/pages/single-program.html',
  resolve: {
    'isAuth': ['fbRefs', function(fbRefs) {
      return fbRefs.getAuthObj().$requireAuth();
    }],
    'programData': ['$route', 'fbRefs', 'states', function($route, fbRefs, states) {

      // Get our program key from $routeParams
      var key = $route.current.params.program;

      // Get unique user id
      var uid = states.getAuth().uid; // Throws error

      // Define our path
      var path = uid + '/programs/' + key;

      // Fetch the program from Firebase
      var program = fbRefs.getSyncedObj(path).$loaded();

      return program;
    }]
  }
})

Добавлен код службы states по запросу:

auth.service('states', [function() {

  var auth;

  return {
    getAuth: function() {
      return auth;
    },
    setAuth: function(state) {
      auth = state;
    }
  };
}]);
Теги:
firebase
resolve

1 ответ

1

Вы используете "Service Recipe" для создания службы states, но возвращаетесь как "Factory Recipe".

Согласно документу: https://docs.angularjs.org/guide/providers#service-recipe

Вы должны либо использовать это:

auth.factory('states', [function() {

  var auth;

  return {
    getAuth: function() {
      return auth;
    },
    setAuth: function(state) {
      auth = state;
    }
  };
}]);

Или это:

auth.service('states', [function() {

  var auth;

  this.getAuth = function() {
      return auth;
  };

  this.setAuth = function(state) {
      auth = state;
  };
}]);
  • 0
    Я до сих пор не определен.
  • 0
    @Crillewoodz Можете ли вы попробовать создать скрипку или что-то еще? Или вы можете console.log() свои states чтобы увидеть, что на самом деле происходит?

Ещё вопросы

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