我已经完成了两个控制器:
一个是 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。我已经尝试将范围作为对象,并且它返回一个空对象..对于数组也是如此。范围有什么问题?
感谢。
答案 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
未定义)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);
})
})