Это моя первая сборка AngularJS, и я совершенно новичок в ней (я в первую очередь являюсь back-end dev).Угловые .run() значения инициализирующего контроллера
Мне нужно сохранить некоторые глобальные значения, которые затем будут использоваться другими контроллерами/директивами на странице, а также будут переданы в API-запросы на бэкэнд. Я пытаюсь избежать использования $ rootScope и думаю, что смогу это сделать, создав службу для хранения значений типа global/session.
Я хочу иметь возможность загружать эти значения «сеанса» перед запуском любых других контроллеров.
Все, кажется, работает нормально - мой backend api попадает и возвращает объект JSON, но я думаю, что homeCtrl запускается слишком быстро, так как я получаю «Не могу прочитать свойство« пользователь »неопределенный». Если я console.log (response.data), то я могу увидеть объект JSON, поэтому я знаю, что он возвращается, но это происходит ПОСЛЕ неподтвержденной ошибки пользователя.
Поэтому я считаю, что что-то не так в отношении таймингов и обещаний.
Как мне создать службу, которую я могу заполнить свойствами при инициализации, а затем поделиться между контроллерами/директивами?
Любые указатели или оцененная помощь
Мое приложение JS
var app = angular.module('myApp', ['ngRoute'])
/* Set our routing and templates */
.config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
/*Enable HTML5 mode - removes # from URL*/
$locationProvider.html5Mode(true);
$routeProvider
.when('/', {
controller: 'homeCtrl',
template: '<h2 ng-controller="homeCtrl">We are home</h2><p>User type string: {{ userType }}</p>'
})
.when('/my-status', {
template: '<h2>We are my profile</h2>'
})
.otherwise({redirectTo: '/'});
}])
/* gather Global variables and store */
.run(['mySession',function(mySession){
mySession.init();
}]);
app.controller('homeCtrl', ['mySession', function ($scope, mySession) {
$scope.userType = (mySession.employeeType == "1") ? "Admin" : "User";
}]);
app.factory('mySession',['$http','$q',function($http, $q){
var user = {};
var displayState = 0;
return {
init : function(){
return $http.get('/api/users/1')
.then(function(response) {
if (typeof response.data === 'object') {
this.user = response.data;
return true;
} else {
// invalid response
return $q.reject(response.data);
}
}, function(response) {
// something went wrong
return $q.reject(response.data);
});
}
};
}])
у вас нет доступа к 'user' сам объект ... добавить его вернуть объект – charlietfl