2015-05-28 54 views
1

我在AngularJS空間初學者和創建我的第一個應用程序,並在一個地步,我需要做的一些東西,如顯示發送XHR請求,並再次之前裝載機發生前做的東西收到回覆時將其隱藏起來。

我試着用google搜索它,發現攔截器的東西在AngularJS中有請求和響應XHR,但是這樣做會對每個XHR請求都有效,我只想在我的登錄控制器中進行操作。

更新:我正在尋找一些jQuery的像beforeSend和ajaxcomplete喜歡回調。

回答

3

沒有什麼奇特的需要。

$scope.loading = true; 
$http.get(...) 
.success(function() { 
    $scope.loading = false; 
}); 
+0

嗯,不錯的技巧,但我一直在尋找一些jQuery的像beforeSend和ajaxcomplete喜歡回調。 – AngularLearner

+1

這不是一個「訣竅」。這正是這個代碼所做的。執行'$ scope.loading = true;'_before_發送請求,'$ scope.loading = false;''成功'(相當於「ajaxcomplete」)。即使'$ http.get'上有'.before()'方法,你是否仍然需要在'$ scope'中設置一些你可以綁定到HTML中的東西? –

1

入住此琴,請http://jsfiddle.net/2r88Ljer/4/

<div ng-app> 
    <div ng-controller="Ctrlr"> 
     <a href="" ng-click="login()">Login</a> 
     <i class="fa fa-spinner fa-spin" ng-show="loading"></i> 
    </div> 

    <div ng-controller="anotherCtrl"> 
     <a href="" ng-click="fetch()">Get Some Other Data</a> 
     <i class="fa fa-spinner fa-spin" ng-show="loading"></i> 
    </div> 
</div> 

,並在你的JavaScript補充:

function Ctrlr($scope,$timeout,$http){ 
    $scope.loading=false;  
    $scope.login= function(){ 
    $scope.loading=true; 
    $http.get("/echo/json/").success(function() { 
     $timeout(function(){ 
      $scope.loading = false; 
     },2000); 
    }); 
    } 
} 

function anotherCtrl($scope,$timeout,$http){ 
    $scope.loading=false;  
    $scope.fetch = function(){ 
    $scope.loading=true; 
    $http.get("/echo/json/").success(function() { 
     $timeout(function(){ 
      $scope.loading = false; 
     },1000); 
    }); 
    } 
} 

我已經創建瞭如何顯示和隱藏加載的功能演示時,您的請求開始並完成並將適用於您想要的控制器。我使用font awesome作爲加載圖標(爲簡單起見),但您可以使用任何您想要的(img,gif等)。

希望它可以幫助

相關問題