0

我正在使用 AngularMaterial 的 $mdDialog 服务。这是我正在使用的示例代码 -

var highlighter = {};
$mdDialog.show({
    templateUrl: 'sample.html',
    parent: angular.element(document.body),
    clickOutsideToClose: true,
    bindToController: true,
    onRemoving: function (event, removePromise) {
        if(highlighter.answer!==1) {
            //Do something here
        }
        highlighter.answer = undefined;
    }
})
.then(function (answer) {
    highlighter.answer = answer;
});

show()仅当单击 mdDialog 中的任何按钮时,方法返回的承诺才会解析。按钮的索引作为answer参数提供。只有当答案/按钮索引不等于 1 时,我才需要做某事。
问题是在单击任何按钮时解决承诺之前调用 onRemoving,因此在highlighter.answer需要时没有获得正确的值(在onRemoving 回调)。

换句话说,只要调用任何按钮或在没有单击按钮的情况下关闭对话框时,就会调用 onRemoving。只有当按钮被点击时,promise 才会被解决。

所以我的问题是,有没有办法让任何回调在承诺被解决(然后被调用)后被调用,以便设置答案值并且我知道是否调用了按钮。无论承诺是否已解决,都应在删除对话框时调用此回调。

4

1 回答 1

0

我忘记了mdDialog使用q库作为承诺的一点,它也有一个finally动作。我只需要添加finally动作并将onRemoving代码放在那里。然后我可以删除onRemoving监听器。最终代码如下所示 -

$mdDialog.show({
    templateUrl: 'app/modules/hire/common/views/annotation.html',
    parent: angular.element(document.body),
    clickOutsideToClose: true,
    bindToController: true
}).then(function (answer) {
    highlighter.answer = answer;
}).finally(function () {
    if(highlighter.answer!==1) {
        //Do something here
    }
    highlighter.answer = undefined;
});

这个答案帮助我找到了解决方案。

于 2017-02-01T05:39:57.227 回答