Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 取消$transitions更改ui路由器_Angularjs_Angular Ui Router - Fatal编程技术网

Angularjs 取消$transitions更改ui路由器

Angularjs 取消$transitions更改ui路由器,angularjs,angular-ui-router,Angularjs,Angular Ui Router,在某些情况下,我试图使用ui路由器取消$transitions更改 在我的运行块中,我有以下代码: $transitions.onStart( { from: 'createCatalog.previewStyles'}, function(trans) { var from = trans.from(), to = trans.to(); previewStylesService.checkSave() .then(func

在某些情况下,我试图使用ui路由器取消$transitions更改

在我的运行块中,我有以下代码:

   $transitions.onStart( { from: 'createCatalog.previewStyles'}, function(trans) {
      var from = trans.from(),
            to = trans.to();
      previewStylesService.checkSave()
        .then(function success() {
           return $state.target(to);
        }, function err() {
          return $state.target(from);
        });
    });
我的previewStylesService checkSave函数如下所示:

    function checkSave() {
        var deferred = $q.defer()
        if (dataChanged) {
            if (confirm('Would you like to save the changes made to the catalog?')) {
                catalogService.prepCatalogSave()
                    .then(function success() {
                        deferred.resolve();
                    }, function err () {
                        deferred.reject();
                    })
            } else {
                deferred.resolve();
            }
        } else {
            deferred.reject();
        }
        return deferred.promise;
    }

然后,基于上述条件,$转换将发生或取消。问题是,即使上述代码的承诺被拒绝,状态仍会更改为最初请求的状态。在这种情况下,我如何“取消”状态更改?

我知道帮助您可能已经晚了,但这可能会帮助其他人。 我只是遇到了同样的问题,在大约几个小时的研究/文档阅读之后,我得出结论,$transitions.onBlaBla回调的返回值可以是true(正常恢复转换)、false(取消转换)或promise(transitionService将等待此承诺拒绝/解决,以决定是否需要进行转换

你可以试着回来

return previewStylesService.checkSave()
查看发生了什么,或者尝试使用返回true/false和其他一些代码挂钩以不同的方式执行

以下是onSuccess回调返回的钩子结果链接:

只需从钩子中返回false即可取消转换:


没错,仅供参考,只有在转换结束时才会调用onSuccess和onError钩子,因此返回值将被忽略(请参阅文档:-返回值),因此对于所有其他钩子,返回值将按预期工作。