Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
AngularJS:我能';t查看在get中创建的范围_Angularjs_Angularjs Scope_Ionic Framework_Ionic_Http Get - Fatal编程技术网

AngularJS:我能';t查看在get中创建的范围

AngularJS:我能';t查看在get中创建的范围,angularjs,angularjs-scope,ionic-framework,ionic,http-get,Angularjs,Angularjs Scope,Ionic Framework,Ionic,Http Get,我做了两个控制器: 一个是一个UsersCtrl,其中我使用$http.get()从一个json中获取所有用户。当你点击一个用户时,你进入另一个带有另一个控制器的页面(UsersDetailCtrl),在那里我必须使用通过url传递的$stateParams.id,并检查$http.get中是否有匹配的id 我向您展示我的用户detailctrl,然后告诉您我的问题: .controller('UsersDetailCtrl', function($scope, $http, $ionicMod

我做了两个控制器:

一个是一个UsersCtrl,其中我使用
$http.get()
从一个json中获取所有用户。当你点击一个用户时,你进入另一个带有另一个控制器的页面(UsersDetailCtrl),在那里我必须使用通过url传递的
$stateParams.id
,并检查
$http.get
中是否有匹配的id

我向您展示我的
用户detailctrl
,然后告诉您我的问题:

.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);
})
.controller('UsersDetailCtrl',函数($scope、$http、$IonicModel、$window、$stateparms、$ionicLoading、$timeout){
log($stateParams.id);
$scope.loading=$ionicLoading.show({
动画:“淡入”,
显示延迟:0,
背景:真的
});
var urlunteti=“users.json”;
$http.get(urlunteti).success(函数(响应){
对于(变量i=0;i
进入
$http.get
,准确地进入
for子句
,我有一个
$scope.user=response[I]
,如果我在
console.log(response[I])
console.log($scope.user)
for子句
中做一个
响应,我就会收到我想要的对象,但是正如您在下面看到的,我将
控制台.log($scope.user)
放在控制器的末尾,因为我需要在html视图中使用该作用域。 结果如何<代码>未定义

那么为什么在for子句中它是正确的,而在http中它不是? 如何在html视图中使用
$scope.user

另外,我已经尝试将作用域设置为对象,但它返回空对象。。数组也是这样。范围有什么问题

谢谢。

如评论所述,
$scope.user
设置得很好(如果有一个匹配的
$stateParams.id
),您在
控制台.log($scope.user)
日志记录
未定义的
中的“问题”是执行得太早

流程如下所示:

  • $http.get(urlunteti).success(successFunction)
    ->http get开始异步执行
  • console.log($scope.user)
    (外部
    successFunction
    )->立即执行(
    successFunction
    尚未调用,因此此时未定义
    $scope.user
  • HTTP GET成功返回->
    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);
    })
})
.controller('UsersDetailCtrl',函数($scope、$http、$IonicModel、$window、$stateparms、$ionicLoading、$timeout){
log($stateParams.id);
$scope.loading=$ionicLoading.show({
动画:“淡入”,
显示延迟:0,
背景:真的
});
var urlunteti=“users.json”;
$http.get(urlunteti).success(函数(响应){
对于(变量i=0;i
您的
控制台.log($scope.user)
$http.get
之外,因此它将在请求解决之前发生。看见另外,为什么每次迭代
响应时都要覆盖
$scope.user
错误:[$rootScope:inprog]$digest已在进行中
已尝试过。:)@KaranKumar不,这很可能会导致一个错误,说摘要周期已经在进行中。@LudovicoLoreti哎呀,我错过了
if
。有实际问题吗?你所拥有的应该很好用。当HTTP请求被解析并且您的一个响应与ID匹配时,
$scope.user
将被设置,该设置应显示在任何HTML视图中。如果您希望在找到用户记录后立即记录该记录,请在
for
循环之后(在
$timeout
调用之前)执行,例如
控制台.log(“$scope.user”,“$scope.user”)
。在找到用户后,我还将
中断
,这样您就不会进行不必要的迭代