在我的HTML页面,我有一个button
标签,看起来像这样:在AJAX调用之前加载HTML页面?
<button ng-hide="alreadyFreinds()" type="button" class="btn btn-primary btn-lg">Friend</button>
然而,当我尝试访问alreadyFriends
功能的某些部分如下图所示,我得到一个错误,说TypeError: Cannot read property 'length' of undefined
$scope.alreadyFreinds = function(){
for(var i = 0; i < $scope.user.friends.length; i++){
if($scope.user.friends[i].username === $scope.realUserViewing.username &&
$scope.user.friends[i].requested == true && $scope.user.friends[i].pending == true){
return true;
}
}
};
然而,令人困惑的是,我已经有$ scope.user.friends和几行定义了这个功能上面,像这样$ scope.user:
$http.get('/api/users/me')
.then(function(result){
$scope.user = result.data;
});
我有点困惑,为什么在Ajax调用完成之前为什么HTML页面会加载并调用alreadyFriends函数。我试图用承诺来帮我解决这个,我发现
AngularJS: How to execute a controller function AFTER completion of AJAX call in a service?
但这并没有帮助我太多,因为当我做
$http.get('/api/users/me')
.then(function(result){
var deferred = $q.defer();
$scope.user = result.data;
deferred.resolve($scope.alreadyFreinds);
return deferred.promise;
});
该做的工作,但HTML页面仍然在AJAX调用完成之前加载。任何想法如何解决这一问题?谢谢!
一种方法是解决你的路线中的'用户'?这样,您就可以在开始时在控制器中准备好它。你有没有尝试通过'解决'而不是在控制器中进行ajax调用? – CMR 2014-09-05 08:42:18
@CMR啊我明白了。我以前没有用过,也没有听说过。那么我会仔细研究一下。你能给我一些关于如何使用它的提示吗? – user1567909 2014-09-05 08:51:52
看看这个例子[https://docs.angularjs.org/api/ngRoute/service/$route#example]。 – CMR 2014-09-05 08:55:43