在angularjs上调用

时间:2016-09-13 21:38:39

标签: angularjs json timeout ui-grid

我确信已经多次询问过,但我......找不到它。现在是晚上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调用的时间,但我不确定如何。

请帮忙!如果你不介意,我需要尽可能多的代码!再次感谢。

1 个答案:

答案 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
    });

});