在模态angularjs中返回多个结果

时间:2014-10-09 06:43:40

标签: javascript angularjs modal-dialog

我有一个angularjs应用程序。 我在我的应用程序中添加了一个按钮,当用户点击它时,会弹出一个弹出屏幕。 用户应该从2个下拉列表中进行选择,这样我就有两个值需要发送回我打开模态屏幕的服务。

打开弹出屏幕的服务

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中,当我单击OK时,我发送了两个值:

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

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

问题是只有第一个值返回服务。 我在其他例子中看到过,他们可能只是想出一个结果:

modalInstance.result.then(function (result)

我可以发送两个或者值作为结果,还是只能在这种情况下发送一个带有这两个值的对象?

2 个答案:

答案 0 :(得分:15)

如果您查看$modal source 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参数。因此,如果要传递多个,则必须传递对象或数组。

答案 1 :(得分:2)

  

我可以发送两个或值作为结果

除非你使用其他方式让模态与调用代码进行通信(我怀疑它会不必要地复杂化),否则你只能发送一个值。

这是因为传递给close的值最终成为modalInstance.result承诺的已解决值。 Promise只有一个已解决的值。但正如您所指出的,您可以发送一个对象,因此这个单值可以是多个包装器。