如何使 ng-init "wait" 直到所有库都完全加载?
How to make ng-init "wait" until all libraries are fully loaded?
我正在使用 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: Cannot read 属性 'invited' of undefined.
此时页面已加载。但是,我注意到奇怪的行为,一旦我刷新页面,然后我得到那个 TypeError,当我导航到另一个页面然后返回到上面的 ng-init 部分时,它加载正常。然后它输出 "Success" 以及其余的正确信息。
为什么当我刷新页面时,我得到 TypeError,然后在我刷新页面后,得到 TypeError,离开页面然后 return 到那个页面,它执行得好吗?
我怀疑是因为它还没有加载完我的后端服务器代码——gapi。 gapi.client.conference.invited() 中的 invited() 是我用 python 代码为我的服务器编写的函数。
到目前为止,从解决这个问题开始,因为它最终在我离开然后 return 到该页面后成功执行了 invited() 函数,我假设它与以下事实有关我的前端正在调用尚未初始化的后端。
奇怪的是,如果我的假设是正确的,那么为什么会这样,当我将前端调用拼错为后端不存在的东西时(实际上是在模仿前端正在调用未完成加载时的后端)我得到一个完全不同的错误?我不应该得到相同的 TypeError 吗?
我把 gapi 调用拼错了:
gapi.client.conference.boomshakalaka()。 boomshakalaka() 不在我的后端 python 代码中。
一开始,当我在后台用这个不存在的函数刷新页面时,我得到了和上面一样的错误。然后,当我离开并返回同一页面时,我得到了不同类型的错误:
类型错误:gapi.client.conference.boomshakalaka 不是函数
之前只是undefined的TypeError,现在是不是函数的TypeError
它现在怎么知道它不是一个函数?它只能知道,如果它加载了后端并意识到在尝试进行调用时没有这样的功能。鉴于不存在的功能,它不应该从初始页面刷新开始就这样做吗?
我认为它可能在加载后端的 gapi.client.conference 部分和尚未将所有内容完全加载到 "know" 之间陷入困境,boomshakalaka 确实不存在。
我怎样才能用这个 gapi 调用初始化这个页面,但让它等到后端完全加载?同样,我怀疑是我的后端代码没有完全加载,因为当我在刷新后离开页面并返回时,我没有收到这样的错误。然后一切都成功地打印到控制台。只有当我刷新时,我才得到 TypeError。
想法?
问题区域是 gapi.client.conference 而您可能会尝试将 $timeout 包裹在现有代码中以提供你的脚本需要一些时间来初始化它。
肮脏的修复可能会起作用,但您应该首先尝试找出 gapi 服务失败的原因。也许在它准备好时做一个回调而不是做 angular init.
$scope.invited = function () {
$timeout(function(){
gapi.client.conference.invited().
execute(function(resp){});
},200);
};
我正在使用 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: Cannot read 属性 'invited' of undefined.
此时页面已加载。但是,我注意到奇怪的行为,一旦我刷新页面,然后我得到那个 TypeError,当我导航到另一个页面然后返回到上面的 ng-init 部分时,它加载正常。然后它输出 "Success" 以及其余的正确信息。
为什么当我刷新页面时,我得到 TypeError,然后在我刷新页面后,得到 TypeError,离开页面然后 return 到那个页面,它执行得好吗?
我怀疑是因为它还没有加载完我的后端服务器代码——gapi。 gapi.client.conference.invited() 中的 invited() 是我用 python 代码为我的服务器编写的函数。
到目前为止,从解决这个问题开始,因为它最终在我离开然后 return 到该页面后成功执行了 invited() 函数,我假设它与以下事实有关我的前端正在调用尚未初始化的后端。
奇怪的是,如果我的假设是正确的,那么为什么会这样,当我将前端调用拼错为后端不存在的东西时(实际上是在模仿前端正在调用未完成加载时的后端)我得到一个完全不同的错误?我不应该得到相同的 TypeError 吗?
我把 gapi 调用拼错了: gapi.client.conference.boomshakalaka()。 boomshakalaka() 不在我的后端 python 代码中。
一开始,当我在后台用这个不存在的函数刷新页面时,我得到了和上面一样的错误。然后,当我离开并返回同一页面时,我得到了不同类型的错误: 类型错误:gapi.client.conference.boomshakalaka 不是函数
之前只是undefined的TypeError,现在是不是函数的TypeError
它现在怎么知道它不是一个函数?它只能知道,如果它加载了后端并意识到在尝试进行调用时没有这样的功能。鉴于不存在的功能,它不应该从初始页面刷新开始就这样做吗?
我认为它可能在加载后端的 gapi.client.conference 部分和尚未将所有内容完全加载到 "know" 之间陷入困境,boomshakalaka 确实不存在。
我怎样才能用这个 gapi 调用初始化这个页面,但让它等到后端完全加载?同样,我怀疑是我的后端代码没有完全加载,因为当我在刷新后离开页面并返回时,我没有收到这样的错误。然后一切都成功地打印到控制台。只有当我刷新时,我才得到 TypeError。
想法?
问题区域是 gapi.client.conference 而您可能会尝试将 $timeout 包裹在现有代码中以提供你的脚本需要一些时间来初始化它。
肮脏的修复可能会起作用,但您应该首先尝试找出 gapi 服务失败的原因。也许在它准备好时做一个回调而不是做 angular init.
$scope.invited = function () {
$timeout(function(){
gapi.client.conference.invited().
execute(function(resp){});
},200);
};