2016-06-02 4 views
1

Meine Webanwendung ist eine CRUD, in der eine Liste der Benutzer und Vorgänge enthalten ist (Einfügen, Löschen, ECC). Um einen Benutzer hinzuzufügen, müssen Sie die Felder eines Modales ausfüllen (bootstrap - ui). Das Problem besteht darin, dass die Liste nach dem Einfügen nicht automatisch aktualisiert wird.Tabelle nach einem Einfügen/Aktualisieren in AngularJS aktualisieren

Dies ist mein Code: HTML:

... 
ng-repeat="p in list" 
... 

JS:

var app = angular.module('app', [ 'ui.bootstrap', 'ngResource' ]); 

app.controller("FirstController", [ 
     '$scope', 
     'ElementFactory', 
     'ElementsFactory', 
     '$uibModal', 
     function($scope, ElementFactory, ElementsFactory, $uibModal) { 

      $scope.list = ElementsFactory.query(); 

      $scope.add = function() { 

       var modalAddInstance = $uibModal.open({ 
        animation : true, 
        templateUrl : 'addModal.html', 
        controller : 'addModalController', 
        resolve : { 
         element : function() { 
          return $scope.element; 
         } 
        } 
       }); 
      }; 

     } ]); 

app.controller("addModalController", function($scope, $uibModalInstance, 
     ElementsFactory, element) { 

    $scope.element = element; 



    $scope.addCancel = function() { 
     $uibModalInstance.dismiss('cancel'); 
    }; 

    $scope.addElement = function() { 
     ElementsFactory.create($scope.element, function(){ 
      //REFRESH TABLE HERE ********************** 
      $uibModalInstance.close(); 
     }); 



    }; 

}); 

app.factory('ElementsFactory', [ '$resource', function($resource) { 
    return $resource('rest/all', {}, { 
     query : { 
      method : 'GET', 
      isArray : true 
     }, 
     create : { 
      method : 'POST' 
     } 
    }); 
} ]); 

Sobald das neue Element hinzufügen, das ist nach Aktualisierung der Seite nur sichtbar und nicht automatisch. Was ist der Code, der eingefügt werden soll, wo ich Ihnen angezeigt habe, dass die Tabelle automatisch aktualisiert wird?

Antwort

0

Sie müssen ein neues Element zu $ ​​scope.list in FirstController hinzufügen. Sie aktualisieren $ scope.list nicht, sobald das neue Element hinzugefügt wurde.

app.controller("addModalController", function($rootScope,$scope, $uibModalInstance, 
      ElementsFactory, element) { 

     $scope.element = element; 



     $scope.addCancel = function() { 
      $uibModalInstance.dismiss('cancel'); 
     }; 

     $scope.addElement = function() { 
      ElementsFactory.create($scope.element, function(){ 
       //REFRESH TABLE HERE ********************** 
       $rootScope.$broadcast("Element Added"); 
       $uibModalInstance.close(); 
      }); 



     }; 

    }); 

app.controller("FirstController", [ 
     '$scope', 
     'ElementFactory', 
     'ElementsFactory', 
     '$uibModal', 
     function($scope, ElementFactory, ElementsFactory, $uibModal) { 

      $scope.list = ElementsFactory.query(); 

      $scope.add = function() { 

       var modalAddInstance = $uibModal.open({ 
        animation : true, 
        templateUrl : 'addModal.html', 
        controller : 'addModalController', 
        resolve : { 
         element : function() { 
          return $scope.element; 
         } 
        } 
       }); 
      }; 

      $scope.$on("Element Added",function(pevent,padata){ 
      $scope.list = ElementsFactory.query(); 
      }) 
     } ]); 
+0

Ich dachte an das Schreiben: $ scope.list = ElementsFactory.query(); nach dem Einfügen, aber es funktioniert nicht, weil es den Umfang nicht übernimmt. – fuerteVentura22

+0

Sie können $ rootScope. $ Broadcast von modalcontroller hinzufügen, sobald sie eingefügt wurde, und maincontroller diese Broadcast hören. Beim Hören des Hauptcontrollers führen Sie einen Query-Aufruf von der Element-Factory aus (setzen Sie den Brodacast direkt auf // REFRESH TABLE HIER). – Don

+0

mmm .. können Sie den Code posten? – fuerteVentura22