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);
})
})
我做了两个控制器:
一个是 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);
})
})