在我的Angular SPA应用程序中使用ng-grid 2.0.7和OAuth2刷新令牌时遇到了一个非常烦人的问题。
我的应用程序使用OAuth2在登录时生成身份验证令牌,每次令牌过期时都会生成HTTP 401错误。然后,我有 一个AngularJS响应拦截器,它拦截HTTP 401错误并在再次重试先前的HTTP请求之前请求新的刷新令牌。现在,使用ng-grid时,所有这些在我的应用程序 EXCEPT 中都能很好地工作。
这是我的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错误并且收到新的刷新令牌时,即使开发人员,ng-grid仍为空白 控制台日志清楚地显示REST后端发送的数据。如果我立即转到另一页然后返回网格刷新并显示数据,但如果我等到 令牌过期后,它不显示数据,网格仍为空白。
这让我想知道在$ digest周期中接收数据时是否存在ng-grid无法刷新的问题。我可以确认显示$scope.$$phase
<{1}}正在执行时,在开发人员控制台中$digest
。
以前是否有人遇到过此问题,如何解决?
在最坏的情况下,我将不得不放弃ng-grid并使用SmartTable或滚动我自己的自定义网格。
答案 0 :(得分:0)
在我意识到getOrders()
方法落入error
回调并因此拒绝回复后,我设法解决了我自己的问题。更改error
回调后,它会deferred.resolved(self)
对问题进行适当的整理。