2014-10-09 9 views
9

Ich habe eine angularjs App. Ich habe meiner App eine Schaltfläche hinzugefügt und wenn ein Benutzer darauf klickt, wird ein Popup-Bildschirm angezeigt. Der Benutzer sollte aus 2 Dropdown-Listen wählen, so dass ich zwei Werte habe, die ich an meinen Dienst senden muss, der den modalen Bildschirm geöffnet hat.Mehr als ein Ergebnis in Modal Winkel zurückgeben js

Der Dienst, der die Pop-up-Bildschirm

app.service('OriginalService', [ '$modal', 
function ($modal) { 

this.openDialog = function(){ 
     var modalInstance = $modal.open({ 
      templateUrl: 'ModalScreen.html', 
      controller: 'ModalController' 
     }); 

     modalInstance.result.then(function (oneFilter, secondFilter) { 
      this.filtersMananger.oneFilter= oneFilter; 
      this.filtersMananger.secondFilter= secondFilter; 
     }, function() { 

     }); 
    }; 
}]); 

Im ModalController öffnet, wenn ich auf OK klicken i die beiden Werte gesendet:

zu
app.controller('ModalController', ['$scope', '$modalInstance', 
            function ($scope, $modalInstance) { 

$scope.ok = function() { 
     $modalInstance.close($scope.filterMananger.oneFilter, 
          $scope.filterMananger.secondFilter); 
    }; 
}]); 

Das Problem ist, dass nur der erste Wert zurückgeben der Service. sah ich in anderen Beispielen und vielleicht in Winkel sie erwartet nur ein Ergebnis:

modalInstance.result.then(function (result) 

Kann ich zwei oder Werte als Ergebnis senden, oder muss ich ein Objekt mit den beiden Werten senden nur in diesem Fall?

Antwort

15

Wenn Sie einen Blick auf $modalsource code nehmen Sie diese Zeilen sehen:

var modalInstance = { 
    result: modalResultDeferred.promise, 
    opened: modalOpenedDeferred.promise, 
    close: function(result) { 
     $modalStack.close(modalInstance, result); 
    }, 
    dismiss: function(reason) { 
     $modalStack.dismiss(modalInstance, reason); 
    } 
}; 

Von denen es klar ist, dass close und dismiss Methoden nur ein result Parameter akzeptieren. Sie müssen also übergeben und Objekt oder Array, wenn Sie mehrere übergeben möchten.

2

Kann ich sende zwei oder Werte als Ergebnis

Sofern Sie eine andere Art und Weise implementieren für die modale mit dem anrufenden Code zu kommunizieren (was ich würde vermuten, dass unnötig kompliziert) können Sie nur senden ein Wert.

Dies liegt daran, dass der an close übergebene Wert der aufgelöste Wert der modalInstance.result Versprechung ist. Versprechen haben nur einen aufgelösten Wert. Sie können jedoch ein Objekt senden, so dass dieser einzelne Wert ein Wrapper für mehrere sein kann.