这是我的第一个AngularJS版本,我完全不熟悉它(我主要是一个后端开发人员)。
我需要存储一些全局值,然后它们将被页面上的其他控制器/指令使用,并且还将传递给后端的API调用。我试图避免使用$ rootScope,并认为我可以通过创建存储全局/会话类型值的服务来管理它。
我希望能够在运行任何其他控制器之前加载这些'session'值。
一切似乎都正常工作 - 我的后端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);
});
}
};
}])
答案 0 :(得分:0)
我建议您使用:ngStorage,让您使用存储(持久性其他多个会话)&amp;会议(仅限一次会议)
请参阅此处的官方文档:https://github.com/gsklee/ngStorage
然后,要先将它们初始化,请将它们初始化为app.run()
要使用它,请将ngStorage注入需要这些值的每个控制器/服务