在打开对话框的控制器中,我有:
$scope.openDialog = function () {
var options = dialogOptionsFactory.build('/my/route/file.html', 'ChildController');
var d = $dialog.dialog(options);
d.open().then(function (result) {
if (result) {
// THIS DOESN'T FIRE UNTIL DIALOG IS REOPENED!
$scope.myresult = result;
}
});
};
在对话框控制器中我有这个(或多或少):
listModule.controller('ChildController', ['$scope', '$rootScope', 'dialog', function ($scope, $rootScope, dialog) {
$scope.uploadComplete = function (ifrm) {
var response = angular.element(ifrm).contents().find("body").text();
var responseObj = eval("(" + response + ")"); //Parentheses needed to convert JSON to JS object.
$scope.close(responseObj.Data);
};
$scope.close = function (result) {
dialog.close(result);
};
}]);
为什么直到我再次单击打开对话框后才会执行“then”承诺?
更新我添加了更多上下文,因为我认为它可能是相关的。我正在从隐藏的 iframe 的正文中获取数据。如果我直接打电话,承诺就会很好$scope.close()
。这让我觉得它要么与 iframe 有关,要么我将一个对象传回给 dialog.close()。