Angular .run()初始化控制器值

时间:2015-05-15 16:27:23

标签: angularjs

这是我的第一个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);
                });
        }
    };
}]) 

1 个答案:

答案 0 :(得分:0)

我建议您使用:ngStorage,让您使用存储(持久性其他多个会话)&amp;会议(仅限一次会议)

请参阅此处的官方文档:https://github.com/gsklee/ngStorage

然后,要先将它们初始化,请将它们初始化为app.run()

要使用它,请将ngStorage注入需要这些值的每个控制器/服务