Sweet-alert确认对话框的响应

3

我有一个函数,其中我自定义了我的sweet-alert对话框。我想在许多地方使用它,因此将其设置为如下的函数:

$rootScope.giveConfirmDialog = function(title,text,confirmButtonText,toBeExecFunction){
        swal({title: title,   
        text: title,
        .....
        confirmButtonText: confirmButtonText }, 
        toBeExecFunction);
    }

我希望你能够帮我翻译一下关于IT技术的内容。以下是需要翻译的文本:

我想做的很简单:在某个地方调用该函数,并根据用户的答案继续进行,因此:

var res = $scope.$root.giveConfirmDialog("..",
                "test", "test", function () {
                return true;
            });

但我没有得到任何回应。实际上,我找不到这样的例子,我认为这不是常见的使用方式。但是这怎么可能呢?

2个回答

11
似乎您希望根据用户按下确认按钮或取消按钮的不同行为进行区分。
SweetAlert通过回调函数的参数暴露了用户响应。
以下是直接从SweetAlert文档中获取的示例:
swal({
        title: "Are you sure?",
        text: "You will not be able to recover this imaginary file!",
        type: "warning",
        showCancelButton: true,
        confirmButtonColor: "#DD6B55",
        confirmButtonText: "Yes, delete it!",
        cancelButtonText: "No, cancel plx!",
        closeOnConfirm: false,
        closeOnCancel: false 
    },
    function(isConfirm) {
        if (isConfirm) {
            swal("Deleted!", "Your imaginary file has been deleted.", "success");
        } else {
            swal("Cancelled", "Your imaginary file is safe :)", "error");
        }
    }
);

在这个例子中,当确认按钮被按下时,将打开一个新的SweetAlert,以确认您的操作,如果取消按钮被按下,则会打开一个新的SweetAlert,说明操作已被取消。您可以用任何需要的功能替换这些调用。
由于该库使用异步回调,因此swal方法没有返回值。
此外,最好使用像ng-sweet-alert这样的库来包装对sweet alert的调用,以确保您在Sweet Alert回调中进行的任何更改都能被angular生命周期正确捕获。如果您查看ng-sweet-alert的源代码,您将看到作者将对swal和用户回调的调用包装在$rootScope.$evalAsync中,确保当调用和回调完成时angular更新。
从代码风格的角度来看,最好将逻辑放入服务或工厂中以在整个代码库中重用,而不仅仅是将其附加到$rootScope中。

我正在尝试在swal中返回isConfirm,但它不起作用。swal({ title: "你确定吗?", text: "你将无法恢复这个虚构的文件!", type: "warning", showCancelButton: true, confirmButtonColor: "#DD6B55", confirmButtonText: "是的,删除它!", cancelButtonText: "不,取消plx!", closeOnConfirm: false, closeOnCancel: false }, function(isConfirm) { return isConfirm } );你能建议一些修改吗? - ubm
@ubm 您的评论不太清楚。听起来您可能只是误解了如何处理异步回调。如果您仍然遇到困难,可以提供更多信息并开启一个新问题。简而言之,当确认警报时,您想要执行的任何操作都需要在回调函数内部完成。现在,您的回调函数返回一个布尔值。这没有任何作用,因为您将其返回给内部的sweetalert代码,该代码不知道也不关心您的返回值。swal不会返回值。您的回调不应返回值。只需在回调中完成工作即可。 - Jon Quarfoth

1

由于这是异步的,所以您将不会得到响应,您可以使用以下代码片段:

swal({
    title: "Are You Sure?",
    text: "Are you sure to go ahead with this change?",
    type: "warning",
    showCancelButton: true,
    confirmButtonColor: "#DD6B55",
    confirmButtonText: "Yes",
    cancelButtonText: "No",
    closeOnConfirm: true,
    closeOnCancel: true,
  },
  function(isConfirm){
    if (isConfirm) {
      $.ajax({
        url:"/path",
        method:"GET",
        data: {
          category_id: category_id,
        },
        success:function(response) {
           // tasks on reponse
        }
      })
    }
  }
);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接