0

これは何度も尋ねられていると思いますが、私は... 見つけられません。ここは午後 10 時 30 分です。これは皆さんにお任せします。

基本的に、json サーバー メソッドへの 2 つの呼び出しがあります - データの更新と新しい合計の取得です。論理的には、更新データが最初に呼び出され、新しい合計を取得する $emit を介して通知を送信します。残念ながら、サーバー コントローラーにブレークポイントを設定すると、SetAlertRead の前に GetAlertTotals が呼び出されるため、間違ったデータが返されます。

「合計」コードは別のコントローラーにあるため、$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 呼び出しを実行する約束時間を与えると仮定していますが、その方法はわかりません。

助けてください!差し支えなければ、できるだけ多くのコードが必要です。再度、感謝します。

4

1 に答える 1

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

});
于 2016-09-13T22:33:56.023 に答える