2015-02-24 48 views
0

在我的Angular SPA應用中使用ng-grid 2.0.7和OAuth2刷新標記時,我遇到了一個非常惱人的問題。使用ngGrid和OAuth刷新標記時的問題

我的應用程序在登錄時使用OAuth2生成認證令牌,每次令牌過期時都會生成HTTP 401錯誤。然後,我有一個AngularJS響應攔截器,攔截HTTP 401錯誤,並在再次重試上一個HTTP請求之前請求新的刷新令牌。現在,當使用ng-grid時,所有這些在我的應用程序中都很漂亮,除了之外。

這是導致我沒有問題,年底我AngularJS控制器代碼的部分:

appModule.controller('orderBookController', 
    ['$scope', '$timeout', 'orderList', 
     function ($scope, $timeout, orderList) { 

      $scope.orders = []; 
      $scope.orderList = orderList; 

      // get data asynchronously and return the list of orders via a promise. 
      self.getDataAsync = function() { 
       $scope.orderList.getOrders() 
       .then(function (data) { 
        // THIS BIT IS WHAT I AM HAVING PROBLEMS WITH. 
        // $scope.orders gets populated with new data, but 
        // doesn't appear in the grid at all. 
        $timeout(function() { 
         console.log($scope.$$phase); 
         console.log(data.orders); 
         $scope.orders = data.orders; 
        }, 3000); 
       }) 
      }; 

      // load initial data. 
      self.getDataAsync(); 

      // set up ng-grid 
      $scope.orderData = { 
       columnDefs: [ 
        { field: 'orderRef', displayName: 'Order Ref', width: 75 }, 
        { field: 'customerName', displayName: 'Customer Name' }, 
       ], 
       multiSelect: false, 
       headerRowHeight: 48, 
       rowHeight: 30, 
       showFooter: true, 
       data: 'orders' 
      }; 

     } 
    ]); 

問題是,當應用程序遇到一個401錯誤和一個新的刷新令牌已收到即使開發者控制檯日誌清楚地顯示了REST後端發送的數據,ng-grid仍然爲空白。如果我立即轉到另一個頁面,然後回來,網格刷新並顯示數據,但如果我等到 令牌過期,它不會顯示數據,並且網格保持空白。

這讓我懷疑在$ digest循環中接收數據時是否存在ng-grid不刷新的問題。當$timeout正在執行時,我可以確認$scope.$$phase在開發者控制檯中顯示 $digest

以前有沒有人遇到過這個問題,我該如何解決它?

最壞的情況下,我將不得不溝通ng-grid,或者使用SmartTable或者滾動我自己的自定義網格。

回答

0

當我意識到getOrders()方法落入error回調並因此拒絕響應後,我設法解決了我自己的問題。在更改error回調之後,它會確定deferred.resolved(self)正確地解決了問題。

相關問題