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

时间:2015-04-24 06:30:37

标签: angularjs angularjs-scope ionic-framework ionic http-get

我已经完成了两个控制器:

一个是 UsersCtrl ,我在那里frm.OnNewLand += OnNewLand; ,我从json中获取所有用户。当您点击用户时,您将使用另一个控制器( UsersDetailCtrl )进入另一个页面,我将使用通过该网址传递的$http.get()(即确定)并检查$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]) INTO console.log($scope.user)它是正确的,我收到了我想要的对象,但是,如下所示,我已将for clause放入控制器的结束,因为我需要在html视图中使用该范围。 结果? console.log($scope.user)

那么为什么进入for条款它可以正确地从http中得到它不是吗? 如何在我的html视图中使用undefined

P.S。我已经尝试将范围作为对象,并且它返回一个空对象..对于数组也是如此。范围有什么问题?

感谢。

1 个答案:

答案 0 :(得分:2)

@Phil评论时,$scope.user设置得很好(如果有一个匹配$stateParams.id,那就是) - 您的问题&#34;在console.log($scope.user)日志记录undefined中,它执行得太早。

流程如下:

  • $http.get(urlUtenti).success(successFunction) - &gt; HTTP GET开始执行异步
  • console.log($scope.user)successFunction之外) - &gt;立即执行(successFunction尚未调用,因此此时$scope.user未定义)
  • HTTP GET成功返回 - &gt;执行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);
    })
})