2016-04-28 14 views
2

Von einem anderen Controller aus öffnet sich ein Modal-Popup. Nach dem Schließen des modalen Popups mache ich etwas und ich möchte die Daten an einen anderen Controller übertragen, der ein UI-Gitter auffüllt und an $scope.searchResultsGridOptions gebunden ist.UI Grid-Aktualisierung in Angular

Also in meiner ABCCtrl.js Datei:

Beim Schließen eines modalen, das tue ich:

$("#iConfirmationModal").on('hidden.bs.modal', function() { 
    $state.go('transaction.search.results', {}); 
    //I close all the modals 
    $uibModalStack.dismissAll(); 
    //I get the stored search criteria 
    var searchResultsParam = TransactionDataServices.getSavedSearchParams(); 


    //Using them I hit the web service again and get the data to reload the UI Grid 
    TransactionServices.getTransactionAdvSearchResults(searchResultsParam).then(function (result) { 

      //I got the result 
      console.log(result); 
      /Now I want to reload the grid with this data , but the grid scope object which binds to this , is in separate controller 
      searchResultsGridOptions.data = result; 
     }); 
    }); 

In DEFCtrl.js

Ich habe

getSearchResultsGridLayout: function (gridOptions, uiGridConstants, datas) { 
     gridOptions.multiSelect = false; 
     // gridOptions.data.length = 0; 
     // gridOptions.data = ''; 
     gridOptions.data = datas; 
     console.log("Grid Data "); 
     console.log(datas); 
     console.log(gridOptions.data); 
     angular.element(document.getElementsByClassName('grid')[0]).css('height', '0px'); 
     // console.log(datas.length); 
     return gridOptions; 
    } 

Aber wie würde Ich ändere nur die Daten nur wenn Modal schließt?

Rest der Zeit sollte es das Gitter nicht erneuern?

Oder

Gibt es eine Möglichkeit, wenn beim Schließen des modal, anstatt einfach in den Zustand zurückgehen $state.for() verwenden und die bisherigen unrefreshed Daten sehen, kann ich die aktualisierten Daten sehen?

Antwort

0

Hallo Ich denke, Sie müssen nicht die "TransactionServices.getTransactionAdvSearchResults()" in der "ABCCtrl" -Controller aufrufen, aber Sie müssen es in der "DEFCtrl" -Controller aufrufen.

Sie müssen einen Weg finden, um das in "ABCCtrl" extrahierte "searchResultsParam" an "DEFCtrl" zu übergeben.

Sie können die ui-router state parameters verwenden. Sie können einen Parameter in dem "transaction.search.results" Zustand, wie dies angeben:

.state('transaction.search.results', { 
    ... 
    params: { 
     searchResultsParam: null 
    } 
    ... 
}) 

Und in dem "ABCCtrl" es an den Staat übergeben:

$("#iConfirmationModal").on('hidden.bs.modal', function() { 
    //I close all the modals 
    $uibModalStack.dismissAll(); 
    //I get the stored search criteria 
    var searchResultsParam = TransactionDataServices.getSavedSearchParams(); 
    $state.go('transaction.search.results', {searchResultsParam: searchResultsParam}); 

Dann in „DEFCtrl "Sie können es lesen und die Methode" TransactionServices.getTransactionAdvSearchResults() "aufrufen.