$scope.pagination_data = function(page_data){
count = page_data.data.count;
};
console.log("outside count is",count);// this not working
var page = function(){
userService.paginate()
.then(function(user){
$scope.pagination_data(user);
console.log("count is",count);//this is works
});
};
在那个代码中我使用$ http服务使用我获取数据aftr我想要计数然后我也得到计数但现在我想在控制器中这个计数变量访问但我无法访问。我该怎么办..?
答案 0 :(得分:0)
只需在外面定义变量。
var count = 0;
$scope.pagination_data = function(page_data){
count = page_data.data.count;
};
console.log("outside count is",count);// this not working
var page = function(){
userService.paginate()
.then(function(user){
$scope.pagination_data(user);
console.log("count is",count);//this is works
});
};
答案 1 :(得分:0)
第一个语句只定义了函数,它没有调用它。如果要传递给该函数的数据,请在记录计数之前调用它。
// this only defines the function, doesn't call it
$scope.pagination_data = function(page_data){
count = page_data.data.count;
};
console.log("outside count is",count);// count is still unset
var page = function(){
userService.paginate()
.then(function(user){
$scope.pagination_data(user); // this is the call, count will be set
console.log("count is",count);//this will work
});
};
答案 2 :(得分:0)
实际上,两者都有效但你在错误的时间调用了第一个。
.then()
表示paginate()
返回一个承诺。这应该暗示它是异步的。
为了证明这一点,请使用setTimeout
:
$scope.pagination_data = function(page_data){
count = page_data.data.count;
};
setTimeout(function(){
console.log("outside count is",count);// this should work
}, 5000); // wait 5 seconds before calling the code above
// If 5 seconds is not long enough increase it to 10 or something
var page = function(){
userService.paginate()
.then(function(user){
$scope.pagination_data(user);
console.log("count is",count);//this is works
});
};
什么是异步代码?异步只是意味着稍后会调用代码。 paginate().then()
所做的不是立即调用function(user)
函数,而是记住它应该调用function(user)
(然后调用pagination_data
函数来设置count
的值1}})稍后。然后继续运行其他东西。
如果没有其他代码可以运行,则会处理事件循环以及异步处理所需的userService.paginate()
。
当等待最终返回的userService.paginate()
(这可能是网络请求,用户点击等)时,最终会调用function(user)
函数。这反过来调用$scope.pagination_data()
,这是将结果分配给全局count
变量。
setTimeout()
做了什么?嗯,它与我上面描述的相同。它不会立即调用console.log()
,而是记得稍后再调用它。然后当5秒(5000毫秒)到期,并且没有其他javascript代码运行时(这很重要因为它意味着javascript可以运行事件循环),console.log()
最终被调用。