在我的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