我有一个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)
我可以发送两个或者值作为结果,还是只能在这种情况下发送一个带有这两个值的对象?
答案 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);
}
};
从中可以清楚地看出,close
和dismiss
方法只接受一个result
参数。因此,如果要传递多个,则必须传递对象或数组。
答案 1 :(得分:2)
我可以发送两个或值作为结果
除非你使用其他方式让模态与调用代码进行通信(我怀疑它会不必要地复杂化),否则你只能发送一个值。
这是因为传递给close
的值最终成为modalInstance.result
承诺的已解决值。 Promise只有一个已解决的值。但正如您所指出的,您可以发送一个对象,因此这个单值可以是多个包装器。