angularjs - 取消 $transitions 更改 ui-router

标签 angularjs angular-ui-router

我正在尝试使用 ui-router 在某些情况下取消 $transitions 更改。

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

   $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;
    }

然后根据上述条件,$transition 要么发生要么取消。问题是,即使上面代码的 promise 被拒绝,状态仍然会改变到最初请求的状态。在这种情况下如何“取消”状态更改?

最佳答案

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

你可以尝试返回

return previewStylesService.checkSave()

通过返回 true/false 和一些其他代码钩子(Hook)来查看会发生什么或尝试以不同的方式执行此操作

这是您的 onSuccess 回调返回的 Hook 结果的链接: https://ui-router.github.io/ng1/docs/latest/modules/transition.html#hookresult

关于angularjs - 取消 $transitions 更改 ui-router,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41708162/

相关文章:

angularjs - Angular 模态对话框最佳实践

javascript - AngularJS Controller 无法将 Youtube API 响应结果存储到变量

javascript - AngularJS 中的循环依赖和 OOP 问题

javascript - 如何使用 ui-router 在 Angular 1.5 中默认加载默认子路由

javascript - Angular UI Router 仅加载第一个声明的子状态

javascript - angularJS 使用 Angular 谷歌地图查找位置/地名

javascript - 如何按键组合数组中的值?

javascript - 将子路由设为默认

node.js - 点击提交时无法检查为空或为null

javascript - 如何使用 angularjs 包含脚本