0

我在控制器中的開放模式被稱爲「審計」

$scope.comment = function (spec){ 
     ManualService.setManual(spec); 
      var modalInstance = $modal.open({ 
       templateUrl: 'views/comment.html', 
       controller: 'CommentCtrl', 
       size: 'lg' 
      }); 
    } 

當評論按鈕,用戶點擊的模式打開,用戶可以添加註釋。在關閉評論模式我試圖更新「審覈」控制的模式,但它沒有發生

下面的功能是在一個叫做不同的控制器「註釋」

$scope.cancel = function() { 

     $http.post('/api/v1/manual/manual',$scope.id).success (function (data) { 
      $scope.manual = data; 
      ManualService.setManual($scope.manual); 
     }).error(function (data, status) { 
      console.log('Error ' + data); 
     }); 


     $modalInstance.dismiss('cancel'); 
    }; 

我的問題是,我該怎麼辦返回從取消函數調用端點獲得的新數據,無需重新加載頁面

回答

1

返回由$ HTTP服務返回的承諾:

$scope.cancel = function() { 

    var promise = $http.post('/api/v1/manual/manual',$scope.id) 
     .then (function (response) { 
     var manual = response.data; 
     return manual; 
    }); 

    $modalInstance.dismiss(promise); 
}; 

然後從結果鏈:

$modal.open({}).result.then(
    function onClose(value) { 
     // Use the value you passed from the $modalInstance.close() call 
    }, 
    function onCancel(manual) { 
     ManualService.setManual(manual); 
     $scope.manual = manual; 
    } 
) 

$modal服務創建一個$scope,當mo達爾關閉。使用模態服務返回的promise來更新適當的$ scope。

因爲調用承諾的.then方法會返回一個新的派生承諾,所以很容易創建一個承諾鏈。

可以創建任意長度的鏈,並且自從承諾可以通過另一個承諾(其將進一步推遲它的分辨率)來解決時,可以暫停/延遲在任何時間點處承諾的解決鏈。這使得實現強大的API成爲可能。

— AngularJS $q Service API Reference - Chaining Promises

參見UI Bootstrap Modal DEMO and API Reference

1

$modal.open()函數返回一些內容,並且您正在查找result屬性。 Here's的文檔,看看result屬性。

result屬性返回一個承諾,您可以鏈接,以便在模式爲「關閉」或「解散」時執行某些操作。

當關閉一個模式,你有兩個選擇:

  • $modalInstance.close(value)
  • $modalInstance.dismiss(value)

您可以使用一個,但我會建議使用close()功能 「成功」完成,並且dismiss()用於「取消」或「失敗」模態操作。通常情況下,模式右上方的「x」按鈕將調用dismiss()函數,因此您可以單獨處理解僱而不是完成。

所以,你最終的東西是這樣的:

$modal.open({}).result.then(
    function (value) { 
     // Use the value you passed from the $modalInstance.close() call 
    }, 
    function (dismissed) { 
     // Use the value you passed from the $modalInstance.dismiss() call 
    } 
)