2016-02-12 27 views
5

secondo il https://angular-ui.github.io/bootstrap/#/modal, voglio passare un risultato modale al genitore senza chiudere, ma nel codice di esempio, essi mostrano solo un risultato che passa al genitore tramite chiusuraCome passare un risultato da modale di angular-ui-bootstrap a genitore senza chiudere?

$uibModalInstance.close($scope.selected.item); 

voglio passare un dato di genitore quando si fa clic sull'elemento, ma non so farlo. Ho davvero bisogno di aiuto. Grazie.

+0

si c un evento use, un servizio condiviso, ecc. –

risposta

2

Questo è un problema abbastanza comune sulla comunicazione tra i controller poiché non si desidera chiudere il modello e si desidera passare i dati a un controller diverso.

Il percorso più rapido per il problema è l'utilizzo di $broadcast. Nel controllore del vostro modale, scrivere in questo modo:

// Make sure to use $rootScope 
$rootScope.$broadcast("modalDataEventFoo", {selectedItem: $scope.selected.item}); 

Ora, nel controller genitore:

$scope.$on("modalDataEventFoo", function(data) { 
    console.log("got the data from modal", data.selectedItem); 
}); 

Altri riferimenti per la comunicazione tra i controllori:

  1. What's the correct way to communicate between controllers in AngularJS?
  2. https://egghead.io/lessons/angularjs-sharing-data-between-controllers
  3. http://www.angulartutorial.net/2014/03/communicate-with-controllers-in-angular.html
  4. Communication between controllers in Angular
+0

Si noti che gli argomenti passati alla funzione listener sono: (evento, dati) e non solo (dati) come mostrato nell'esempio sopra. –

1

Un altro modo è quello di quota la portata tra il controller principale e il controller modale dichiarando scope proprietà nelle opzioni:

var modalInstance = $uibModal.open({ 
    animation: $scope.animationsEnabled, 
    templateUrl: 'myModalContent.html', 
    controller: 'ModalInstanceCtrl', 
    size: size, 
    scope: $scope, 
    resolve: { 
    items: function() { 
     return $scope.items; 
    } 
    } 
}); 

Scegli questa plunker in cui il modal contiene un elemento di input associato alla variabile $scope.shared.name: http://plnkr.co/edit/4xiEXATxAnvDKBSXxzQd