Мне нужно получить некоторые данные, прежде чем разрешить отображение страницы, чтобы страница не была пустой в течение секунды, прежде чем показывать информацию. Но я не могу заставить мое решение работать.
Проблема заключается в том, что строка 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;
}
};
}]);
Вы используете "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;
};
}]);
console.log()
своиstates
чтобы увидеть, что на самом деле происходит?