我有,做現場API調用下面的工廠方法的angularjs應用:Angularjs結合Ajax的返回值
//Return SP json by SPID
azureMobileClient.getSPjsonBySPID = function (callback, spid)
{
azureMobileClient.azureMSC.invokeApi("get_spjson_byspid", {
parameters: {
spid: spid
},
method: "get"
}).done(function (results) {
//console.log(results.result);
callback(results.result);
}, function (error) {
alert(error.message);
});
}
和我有以下控制器的方法,該方法使用它
$scope.getSPName = function (spid)
{
console.log("SPID:", spid);
var returnedName;
AzureMobileClient.getSPjsonBySPID(function (item)
{
console.log("item.fullname:", item.fullname);
returnedName = item.fullname;
}, spid);
return returnedName;
}
而且這是我目前如何嘗試綁定返回的item.fullname
(在ng-repeat中):
<p>
{{getSPName(t.parsedjsondata.SPId)}}
</p>
問題是綁定不起作用,雖然我確實看到了console.log()的值與正確的item.fullname
。我猜這與API調用的延遲有關,我需要在某處插入$scope.$apply()
,但我不知道該怎麼做。
你真的應該嘗試使用承諾($ q)。以下是有關如何使用$ q.defer()的示例代碼:https://medium.com/javascript-jquery-angular-firebase-and-mongodb/angular-s-q-defer-example-78867ecfa7d8 –