我正在使用angularjs并且在我的部分中进行了这些ng-init调用:
<div ng-init="invited()">
在我的控制器中,我的邀请呼叫结构如下。它有一个gapi异步调用:
$scope.invited = function () {
gapi.client.conference.invited().
execute(function(resp){
$scope.$apply(function() {
if (resp.error){
$log.error('There was an Error');
}
else {
$log.info("Success");
$scope.invitedHangouts = []
$scope.invitedHangout=[]
angular.forEach(resp.items, function(invitedHangout){
$scope.invitedHangouts.push(invitedHangout);
});
}
});
});
};
问题在于每当我使用上面的部分刷新页面时,我得到一个TypeError:无法读取未定义的属性'invite'。
此时页面已加载。但是,我注意到一旦我刷新页面,然后我得到那个TypeError,当我导航到另一个页面,然后回到上面的ng-init部分,然后它加载正常的特殊行为。然后输出“成功”以及其他正确信息。
为什么当我刷新页面时,我得到TypeError然后在刷新页面后,获取TypeError,离开页面然后返回到该页面,它执行得很好?
我怀疑是因为它还没有完成加载我的后端服务器代码 - gapi。来自gapi.client.conference.invited()的invite()是我用python代码为我的服务器编写的函数。
到目前为止从处理这个问题,因为它最终在我离开然后返回到那个页面后成功执行了invite()函数,我假设它与我的前端正在调用的事实有关没有初始化的后端。
奇怪的是,如果我的假设是正确的,那么为什么当我拼错前端调用后端不存在的东西时(实际上模仿前面正在调用后端的事实)它没有完成加载)我得到一个完全不同的错误?我不应该得到相同的TypeError吗?
我拼错了这样的话: gapi.client.conference.boomshakalaka()。 boomshakalaka()不在我的后端python代码中。
首先,当我在后端刷新这个不存在的函数的页面时,我得到与上面相同的错误。然后当我离开并返回同一页面时,我得到了一种不同类型的错误: TypeError:gapi.client.conference.boomshakalaka不是函数
在它只是一个未定义的TypeError之前,现在它是一个不是函数的TypeError。
现在怎么知道它不是一个功能?它只能知道,如果它已经加载了后端并且意识到在尝试拨打电话时没有这样的功能。鉴于没有现有的功能,它不应该从初始页面刷新中执行此操作吗?
我想也许在它加载了后端的这个gapi.client.conference部分之间陷入困境,但还没有完全加载所有东西以“知道”boomshakalaka真的不在那里。
如何使用此gapi调用初始化此页面,但是让它等到后端完全加载?再次,我怀疑这是我的后端代码没有完全加载,因为当我在刷新后离开页面并返回它时,我没有得到这样的错误。然后一切都成功打印到控制台。只有当我刷新时才会得到TypeError。
想法?
答案 0 :(得分:0)
问题区域是 gapi.client.conference ,而您可能会尝试在现有代码中包含 $ timeout ,以便为脚本提供一些时间来初始化它
可能有用的脏修复,但你应该试着弄清楚为什么gapi服务首先失败了。也许在它准备就绪时做回调而不是做角度初始化。
$scope.invited = function () {
$timeout(function(){
gapi.client.conference.invited().
execute(function(resp){});
},200);
};