2016-02-12 10 views
5

nach den https://angular-ui.github.io/bootstrap/#/modal, ich mag, ohne Schließen der Mutter ein Ergebnis von modalem passieren, aber im Beispielcode, sie nur ein vorübergehendes Ergebnisses Eltern zeigt über SchließungWie man ein Ergebnis vom Modal von angular-ui-bootstrap an Eltern übergibt, ohne zu schließen?

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

ich ein Datum übergeben will Eltern, wenn der Gegenstand angeklickt wird, aber ich weiß nicht, es zu tun. Ich brauche wirklich Hilfe. Vielen Dank.

+0

Sie c ein Verwendungsereignis, ein gemeinsam genutzter Dienst usw. –

Antwort

2

Dies ist ein recht häufiges Problem bei der Kommunikation zwischen Controllern, da Sie das Modell nicht schließen und die Daten an einen anderen Controller weitergeben möchten.

Der schnellste Weg zu Ihrem Problem ist $broadcast. In der Steuerung Ihres modal, schreiben wie folgt aus:

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

nun in Ihrer Eltern-Controller:

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

Andere Referenzen für die Kommunikation zwischen Steuerungen:

  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

Beachten Sie, dass die Argumente, die an die Listener-Funktion übergeben werden, sind: (Ereignis, Daten) und nicht nur (Daten) wie im obigen Beispiel gezeigt. –

1

Ein anderer Weg ist, um Anteil der Umfang zwischen der übergeordneten Steuerung und dem modalen Controller scope Eigenschaft in den Optionen erklärt:

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

prüfen diese Plunker, in dem die modal enthält ein Eingabeelement, das an die Variable $scope.shared.name gebunden ist: http://plnkr.co/edit/4xiEXATxAnvDKBSXxzQd

Verwandte Themen