Angular ui-router在刷新/重新加载时用ngSweetAlert替换浏览器警报

时间:2016-06-13 12:27:12

标签: angularjs angular-ui-router onbeforeunload sweetalert

我已经阅读并搜索了这些并找到了变体(例如,点击时),但没有找到有效的浏览器重新加载/刷新。

基本上,我想要的是当用户在浏览器中重新加载,刷新或F5而不是常规警报确认时,会弹出sweetalert对话框,询问用户是否要刷新,丢失他们查看的任何信息,单击确定/取消。

在我的控制器中,我有这个:

 $scope.$on('$destroy', function() {
    window.onbeforeunload = undefined;
});

window.onbeforeunload = function (e) {
    e.preventDefault();
    SweetAlert.swal({
        title: "I display correctly but....",
        text: "before page refreshes and do not wait for user to click ok",
        type: "warning",
        showCancelButton: true,
        confirmButtonColor: "#DD6B55",confirmButtonText: "Ok",
        cancelButtonText: "Cancel",
        closeOnConfirm: true,
        closeOnCancel: true },
        function(isConfirm){
            if (isConfirm) {
                console.log('do something...')
            }
        });
    return undefined;
};

$scope.$on('$locationChangeStart', function( event, toState, toParams, fromState, fromParams) {
    SweetAlert.swal({
        title: "I display and wait for the user to click but too late",
        text: "...after the page refreshes",
        type: "warning",
        showCancelButton: true,
        confirmButtonColor: "#DD6B55",confirmButtonText: "Ok",
        cancelButtonText: "Cancel",
        closeOnConfirm: true,
        closeOnCancel: true },
        function(isConfirm){
            if (isConfirm) {
                console.log('do something...')
            }
        });
});

" window.onbeforeunload"部分在正确的时间加载(在页面重新加载/刷新之前),但不等待用户选择。

" $ scope。$ on(' $ locationChangeStart',..."部分加载太晚(页面重新加载/刷新后)但是等待用户选择。

除了' $ locationChangeStart,'我还试过了“stateChangeStart'和' $ routeChangeStart'无济于事。

我缺少什么让这项工作?任何帮助或方向将不胜感激。

1 个答案:

答案 0 :(得分:0)

您不应该覆盖原生函数,例如alert()confirm(),因为它们是阻塞的,并且它们是有充分理由阻止的。

但如果你真的想这样做,就有可能像这样

/** 
 * Definition of global attached to window properties <br/>
 */ 
    (function() {
      nalert = window.alert;
      Type = {
          native: 'native',
          custom: 'custom'
      };
    })();

/**
 * Factory method for calling alert(). 
 * It will be call a native alert() or a custom redefined alert() by a Type param.
 * This defeinition need for IE
 */ 
    (function(proxy) {

          proxy.alert = function () {
          var message = (!arguments[0]) ? 'null': arguments[0];
          var type = (!arguments[1]) ? '': arguments[1];

          if(type && type == 'native') {
           nalert(message);
          }
          else {
               // TODO: Call to SweetAlert()
               document.write('<h1>I am redefiend alert()<br/>Alert say: '+message+'</h1>');
          }     
      };
   })(this);

这里有更多相关内容 Colored lines