我创建了一个函数表达式并将其分配给范围,这个想法是该函数将启动$ http请求,获取属性然后返回它。
$scope.getRequestDigest = function () {
var url = urlParams['SPAppWebUrl'] + '/_api/contextinfo';
$http.post(url)
.success(function (res) {
return res;
});
}
但是当我调用$ scope.getRequestDigest()时,它只返回undefined,大概是因为ajax调用还没有完成。在$ http请求完成之前,有没有办法延迟返回?我尝试过使用.success()承诺,但这似乎不起作用。
答案 0 :(得分:2)
$http.post
会返回一个承诺(请参阅$q)。要使用结果,请将res
绑定到$scope.res
:
<强>控制器:强>
$scope.getRequestDigest = function () {
var url = urlParams['SPAppWebUrl'] + '/_api/contextinfo';
$http.post(url)
.success(function (res) {
$scope.res = res;
});
}
然后,您可以在任何地方使用$scope.res
(或模板中的res
)。
解决了承诺链后(success
之后),Angular将运行摘要周期并重新绑定$scope
上的所有内容。
答案 1 :(得分:1)
尝试
$scope.getRequestDigest = function () {
var url = urlParams['SPAppWebUrl'] + '/_api/contextinfo';
return $http.post(url);
}
var digestPromise = $scope.getRequestDigest();
digestPromise.then(function(response){
console.log(response.data);
});
通过这种方式,您实际上会返回promise,AngularJS通过$q服务实现。
如果您要输出(console.log(digestPromise)
)digestPromise
,您会看到可以在其上添加各种功能,例如success
或complete
。
答案 2 :(得分:0)
您可以使用.then
$scope.getRequestDigest = function () {
var url = urlParams['SPAppWebUrl'] + '/_api/contextinfo';
return $http.post(url) //this will return a promise
.then(function (res) {
return res.data; //on success this will return a data to caller function
});
}
然后调用者函数将调用该函数并获取这样的数据
$scope.getRequestDigest().then(function(data){
console.log(data)
//here you can get data returned from `getRequestDigest` method
})