无法弄清楚如何在angular.bootstrap中存储$ rootScope

时间:2014-12-31 05:49:05

标签: angularjs

我试图在AngularJS引导方法中调用Web服务,这样当我的控制器最终执行时,它具有显示正确页面的必要信息。下面代码的问题当然是我的$ http.post(..)中没有定义$ rootScope。然后(...

我的回复是我想要的数据,如果$ rootScope设置在那一点,MultiHome控制器将会工作。如何在我的角度文档就绪方法中访问$ rootScope,或者有更好的方法吗?

 angular.module('baseApp')
        .controller('MultihomeController', MultihomeController);

    function MultihomeController($state, $rootScope) {


        if ($rootScope.codeCampType === 'svcc') {
            $state.transitionTo('svcc.home');
        } else if ($rootScope.codeCampType === 'conf') {
            $state.transitionTo('conf.home');
        } else if ($rootScope.codeCampType === 'angu') {
            $state.transitionTo('angu.home');
        }
    }

    MultihomeController.$inject = ['$state', '$rootScope'];

    angular.element(document).ready(function () {

        var initInjector = angular.injector(["ng"]);
        var $http = initInjector.get("$http");
        $http.post('/rpc/Account/IsLoggedIn').then(function (response) {

            $rootScope.codeCampType = response.data

            angular.bootstrap(document, ['baseApp']);
        }, function (errorResponse) {
            // Handle error case
        });


    });

2 个答案:

答案 0 :(得分:1)

$ scope(以及$ rootScope)可以作为控制器和视图之间的粘合剂。我不会用它来存储应用程序类型信息,例如用户,身份或安全性。为此,我使用constant方法或factory(如果您需要封装更多逻辑)。

使用常量的示例:

var app = angular.module('myApp',[]);

app.controller('MainCtrl', ['$scope','user',
function ($scope, user) {
    $scope.user = user;
}]);

angular.element(document).ready(function () {
    var user = {};
    user.codeCampType = "svcc";
    app.constant('user', user);
    angular.bootstrap(document, ['myApp']);    
});

注意由于我们正在引导应用,您需要在视图中删除ng-app指令。

这是一个有效的fiddle

答案 1 :(得分:0)

您可以在run()块中将其设置为在引导期间执行:

baseApp.run(function($rootScope) {
    $rootScope.codeCampType = response.data;
});
angular.bootstrap(document, ['baseApp']);

我认为你不能使用注射器,因为在引导之前没有创建范围。 config()块也可以正常工作,可以让您在需要的地方注入数据。