3

スイートアラートダイアログをコスチューム化する機能があります。多くの場所で使用したいので、次のような関数に設定します。

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

私がやりたいことは簡単です: その関数をどこかで呼び出して、ユーザーの答えに基づいて進みます:

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

しかし、私は何の反応もありません。実際、そのような例は見つかりませんでした。一般的な使用方法ではないと思います。しかし、どうしてそれが可能になるのでしょうか?

4

2 に答える 2

11

ユーザーが確認ボタンを押すかキャンセルボタンを押すかに基づいて、異なる動作が必要なようです。

SweetAlert は、コールバック関数のパラメーターを介してユーザーの応答を公開します。

以下は、 SweetAlert Docsからの直接の例です。

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 ライフサイクルによって適切に取得されるようにすることをお勧めします。swalng-sweet-alert のソースを確認すると、作成者が への呼び出しとユーザーのコールバックをラップして$rootScope.$evalAsync、呼び出しとコールバックが完了したときに角度が確実に更新されることがわかります。

コード スタイルの観点からは、ロジックを $rootScope にアタッチするだけでなく、コードベース全体で再利用できるように、サービスまたはファクトリにロジックを配置する方が適切です。

于 2015-10-29T13:10:26.240 に答える