我确信已经多次询问过,但我......找不到它。现在是晚上10:30,我只能和你们一起离开!
基本上,我有两次调用json服务器方法 - 更新数据并获得新的总数。逻辑上,首先调用更新数据,通过$ emit发送通知,获取新的总数。不幸的是,当我在服务器控制器上放置断点时,在SetAlertRead之前调用GetAlertTotals,因此返回了错误的数据。
'totals'代码在另一个控制器中,因此$ emit / publish / subscribe:
$scope.$on('RefreshUnreadItemsCounter', function () {
$scope.alertCount = $scope.GetAlertCount();
$scope.alertTotals = $scope.GetAlertTotals();
$scope.$apply();
});
数据位于uiGrid中,具有以下(部分)定义:
$scope.gridOptions.onRegisterApi = function (gridApi) {
$scope.gridApi = gridApi;
$scope.gridApi.core.notifyDataChange(uiGridConstants.dataChange.EDIT);
$scope.gridApi.selection.on.rowSelectionChanged($scope, function (row) {
var authorisationToken = $('input[name="__RequestVerificationToken"]').val();
row.entity.AlertSeen = true;
$scope.message = row.entity.Message;
$http({
url: '/Alerts/SetAlertRead',
contentType: "application/json; charset=utf-8",
method: 'POST',
data: { rowId: row.entity.UserAlertsId },
headers: { '__RequestVerificationToken': authorisationToken }
});
$scope.$emit('RefreshUnreadItemsCounter');
});
用户单击一行以显示与该行关联的数据并“读取”该行,通过json调用(/Alert/SetAlertRead
)触发数据更新。我假设我在$ emit调用之前设置了一个超时,给了承诺执行json调用的时间,但我不确定如何。
请帮忙!如果你不介意,我需要尽可能多的代码!再次感谢。
答案 0 :(得分:0)
您立即致电$scope.$emit('RefreshUnreadItemsCounter');
,但没有给出$ http请求被解决或拒绝的机会。您可以使用finally()
来涵盖这两种情况,或使用then(successFunction, errorFunction)
单独处理解决和拒绝案例。尝试将您的代码更改为:
$scope.gridOptions.onRegisterApi = function (gridApi) {
$scope.gridApi = gridApi;
$scope.gridApi.core.notifyDataChange(uiGridConstants.dataChange.EDIT);
$scope.gridApi.selection.on.rowSelectionChanged($scope, function (row) {
var authorisationToken = $('input[name="__RequestVerificationToken"]').val();
row.entity.AlertSeen = true;
$scope.message = row.entity.Message;
$http({
url: '/Alerts/SetAlertRead',
contentType: "application/json; charset=utf-8",
method: 'POST',
data: { rowId: row.entity.UserAlertsId },
headers: { '__RequestVerificationToken': authorisationToken }
}).then(function (response) {
$scope.$emit('RefreshUnreadItemsCounter');
}, function (error) {
// case of rejected promise
});
});