Angularjs根镜值在同一函数的同一控制器中未定义

时间:2016-03-03 17:04:10

标签: angularjs

我在rootscope中设置了用户名值,当我尝试在同一个函数中使用它时,它变得未定义。我不确定为什么会这样。

控制器

    xxxApp.controller('listController', function($scope, $http, $location, $routeParams, $log, uiGridConstants, $rootScope) {

        $scope.isSelected = false;
        $scope.showSpinner = true;
        $rootScope.loggedInUser = {};



        $scope.user = {};
        $http.get("/mdm/getLoggedInUsername")
                .success(function(data, status, headers, config) {              
                    $scope.user = data.user;                
                    $rootScope.loggedInUser = $scope.user;
                    console.log("the logged in user is 1" +$scope.user);

                    console.log("the rootscope logged in user is 1" +$rootScope.loggedInUser);
                })
                .error(function(data, status, headers, config, statusText) {
                    console.log("Error ....the logged in user is 1" +$scope.user);
                });


        console.log("the rootscope logged in user is 2" +$scope.user);
        $http.get("/mdmservice/services/entities/" +$rootScope.loggedInUser) // here rootscope is undefined and throws me 404 error not found
            .success(
                function(data, status, headers, config) {
                    $scope.entities = data;


                })
                .error(function(data, status, headers, config, statusText) {
                    $scope.error = true;
                    $scope.errorMessage = "A system error occured."
                })
                .finally(function () {
                    $scope.showSpinner = false;
                });

2 个答案:

答案 0 :(得分:1)

这是因为$http调用异步 - 这意味着您的程序按以下顺序执行:

  1. 首先启动http呼叫
  2. 打印控制台日志声明
  3. 启动第二次http呼叫
  4. 在相应的http呼叫完成后执行successerror回调
  5. 因此,为了使您的脚本正常工作,您可以将console.log语句和第二个http调用放在第一个http调用的success回调中。

    如果您无法理解这一点,我建议您使用CallbacksPromises在javascript中阅读异步编程。

答案 1 :(得分:1)

那是因为第一个get函数尚未完成。你应该在第一个(成功区域)的回调中调用第二个。