在onRemoving回调中获取Button值

时间:2017-01-31 15:27:41

标签: javascript angularjs angular-material angular-promise mddialog

我正在使用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()方法返回的promise只有在单击mdDialog中的任何按钮时才会解析。按钮的索引以answer参数提供。只有当答案/按钮索引不等于1时,我才需要做某事 问题是onRemoving在单击任何按钮时解析promise之前被调用,因此highlighter.answer在需要时没有得到正确的值(在onRemoving回调中)。

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

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

1 个答案:

答案 0 :(得分: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;
});

This answer帮助我找到解决方案。