2014-10-09 29 views
9

我有一個angularjs應用程序。 我在應用程序中添加了一個按鈕,當用戶點擊它時,會彈出一個屏幕。 用戶應該從2個下拉列表中選擇,所以我有兩個值,我需要發回給我的服務誰打開模態屏幕。以模態角度js返回多個結果

打開彈出界面

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() { 

     }); 
    }; 
}]); 

在ModalController當我點擊確定我發送的兩個值的服務:

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

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

的問題是,只有第一個值返回服務。 我在其他例子中看到的,也許在他們的角度預計只有一個結果:

modalInstance.result.then(function (result) 

我可以給兩個或值的結果,或者我必須只有在這種情況下發送帶有兩個值的對象?

回答

15

如果你看一看$modalsource code你會看到這樣的臺詞:

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

從中很明顯,那closedismiss方法接受只有一個result參數。所以你必須傳遞和對象或數組,如果你想傳遞幾個。

2

我可以給兩個或值,結果

除非你實現一些其他的方式爲模態與調用代碼(我懷疑是不必要的複雜)溝通,你只能發送一個值。

這是因爲傳遞給close的值最終成爲modalInstance.result承諾的解決值。承諾只有一個解決價值。但正如你所指出的那樣,你可以發送一個對象,所以這個單一的值可以是多個包裝。