AngularJS: 我无法查看get中创建的范围

AngularJS: I can't view the scope created in the get

我做了两个控制器:

一个是 UsersCtrl,我在其中执行 $http.get(),然后从 json 中获取所有用户。当你点击一个用户时,你会进入另一个带有另一个控制器的页面(UsersDetailCtrl),我必须使用通过 [=52= 传递的 $stateParams.id ],(没关系)并检查是否有一个 id 在 $http.get.

中匹配

我给你看我的 UsersDetailCtrl 然后我告诉你我的问题:

.controller('UsersDetailCtrl', function($scope, $http, $ionicModal, $window, $stateParams, $ionicLoading, $timeout) {
console.log($stateParams.id);
        $scope.loading = $ionicLoading.show({
          animation: 'fade-in',
          showDelay: 0,
          showBackdrop: true
    });
    var urlUtenti  = "users.json";
    $http.get(urlUtenti).success(function (response) {
        for (var i = 0; i < response.length; i++) {
            if (response[i].id == $stateParams.id) {
                $scope.user = response[i];
            }
          }
        $timeout(function(){
            $ionicLoading.hide();
        },1000);
        })
    console.log($scope.user);
})

进入 $http.get,正好进入 for clause,我有一个 $scope.user = response[i] 如果我做 console.log(response[i])console.log($scope.user) INTO for clause 是正确的,我收到了我想要的对象,但是 正如你在下面看到的,我已经把 console.log($scope.user) 在控制器的末尾,因为我需要在 html 视图中使用该范围。 结果? undefined.

那么,为什么进入 for 子句就可以,而进入 http get 就不行呢? 如何在我的 html 视图中使用 $scope.user

P.S。我已经尝试将作用域设为一个对象,而它 return 我是一个空对象。数组也是如此。范围有什么问题?

谢谢。

正如 @Phil 评论的那样,$scope.user 设置得很好(如果有一个匹配的 $stateParams.id,即)- "problem" 在 console.log($scope.user) logging undefined是执行的太早了

流程是这样的:

  • $http.get(urlUtenti).success(successFunction) -> HTTP GET 开始执行异步
  • console.log($scope.user)(在successFunction之外)->立即执行(successFunction还没有被调用,所以$scope.user此时未定义)
  • HTTP GET returns 成功 -> successFunction 已执行并设置 $scope.user

试试这个:

.controller('UsersDetailCtrl', function($scope, $http, $ionicModal, $window, $stateParams, $ionicLoading, $timeout) {
    console.log($stateParams.id);
    $scope.loading = $ionicLoading.show({
        animation: 'fade-in',
        showDelay: 0,
        showBackdrop: true
    });
    var urlUtenti  = "users.json";
    $http.get(urlUtenti).success(function (response) {
        for (var i = 0; i < response.length; i++) {
            if (response[i].id == $stateParams.id) {
                $scope.user = response[i];
            }
        }
        // console.log moved INSIDE the success function (before timeout)
        console.log($scope.user);
        $timeout(function(){
            $ionicLoading.hide();
        },1000);
    })
})