Javascript 为什么不是';t角度';s$scope可在我对谷歌应用程序引擎数据的调用中访问
我正在尝试创建一个控制器,从谷歌应用程序引擎获取数据,并允许我将其显示在页面上。问题似乎是数据(resp)可以在本地访问,但我似乎无法在函数之外访问它。如果我只使用javascript(…document.getElementById('getListingsResult').innerHTML=result;…),我就可以做到这一点,但如果我为Angular调用$scope,我将无法再访问它。有人知道我如何修复它,同时保留相同的结构来加载和调用gapi吗?这是我的密码: (编辑:添加了$scope.loadData,但问题仍然存在)Javascript 为什么不是';t角度';s$scope可在我对谷歌应用程序引擎数据的调用中访问,javascript,angularjs,google-app-engine,Javascript,Angularjs,Google App Engine,我正在尝试创建一个控制器,从谷歌应用程序引擎获取数据,并允许我将其显示在页面上。问题似乎是数据(resp)可以在本地访问,但我似乎无法在函数之外访问它。如果我只使用javascript(…document.getElementById('getListingsResult').innerHTML=result;…),我就可以做到这一点,但如果我为Angular调用$scope,我将无法再访问它。有人知道我如何修复它,同时保留相同的结构来加载和调用gapi吗?这是我的密码: (编辑:添加了$sco
这是因为您正在进行异步调用。当您试图从回调外部访问$scope.data时,您的请求尚未完成,但仍在处理中。您必须确保您的请求已完成。它应该可以使用promise。此外,代码中缺少request.execute函数的括号 检查以下代码(未测试):
谢谢我该怎么做?我只是尝试创建一个存储数据的变量temp,然后执行$scope.data=temp;在“…根);”之后,但它仍然不起作用。你能详细说明我在哪里分配范围吗?我还试着做var promise=gapi.client.load…,ROOT);然后(函数(数据){$scope.data=data;});但是仍然不走运:(谢谢。我尝试了你的代码,得到了一个错误“TypeError:无法读取未定义的属性'load'似乎有什么东西把它甩了。gapi.client.load?你检查过gapi.client是否存在吗?它存在并且在我使用常规javascript时工作正常。它一定引发了一个异常,但我不认为这真的是一个加载问题,因为我以前已经能够从该函数内部将内容打印到控制台。我认为它正在变得close-though.um,奇怪!您看到错误处的行号了吗?您可以使用调试器查找任何未定义的内容。这很奇怪。当我删除最后一个console.log($scope.data)时,它可以工作,但不一致。现在它似乎正在工作,希望它能继续工作,但我会尝试检查,看看它是否可能是数据存储问题。无论如何,非常感谢!
phonecatControllers.controller('datastoreTestCtrl', ['$scope',
function($scope) {
$scope.data;
$scope.loadData = function() {
var ROOT = 'https://my_team.appspot.com/_ah/api';
gapi.client.load('listingserviceapi', 'v1', function(){
console.log("reached step 1");
var request = gapi.client.listingserviceapi.getListings();
request.execute(function (resp){
if (!resp.code) {
// console.debug(resp);
console.log('loaded! :)');//returns loaded
resp.items = resp.items || [];
$scope.data = resp.items;
console.log($scope.data); //returns an array of data
}
};
} , ROOT );};
$scope.loadData;
console.log($scope.data); //returns [object, object] which is incorrect
}]);
phonecatControllers.controller('datastoreTestCtrl', ['$scope', '$q',
function ($scope, $q) {
$scope.data = null;
$scope.loadData = function () {
var deferred = $q.defer(),
ROOT = 'https://my_team.appspot.com/_ah/api';
gapi.client.load('listingserviceapi', 'v1', function () {
console.log("reached step 1");
var request = gapi.client.listingserviceapi.getListings();
request.execute(function (resp) {
if (!resp.code) {
// console.debug(resp);
console.log('loaded! :)'); //returns loaded
resp.items = resp.items || [];
//$scope.data = resp.items;
//console.log($scope.data); //returns an array of data
deferred.resolve(resp.items);
}
}); //---missing parenthesis here
}, ROOT);
return deferred.promise;
};
$scope.loadData().then(function (data) {
$scope.data = data;
console.log($scope.data); //returns [object, object] which is incorrect
});
}]);