在我的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或者滚动我自己的自定义网格。