ui-router导航到另一个状态onEnter

时间:2015-07-18 00:46:48

标签: angularjs angular-ui-router wizard

我有一个收集信息A的向导流程

    states["wizard"] = {
        abstract: true,
        url: "^/wizard",
        controller: "wizardController",
        templateUrl: "wizard.html"
    };

    states["wizard.input"] = {
        url: "^/input",
        views: {
            "": {
                controller: "wizardController",
                templateUrl: "form.html"
            }
        }
    }
    states["wizard.completed"] = {
        templateUrl: "completed.html"
    };

另一个向导流B是与收集信息B类似的结构。

我想要做的是当用户导航到/向导时,它会检查信息B是否已填满,如果没有,请先导航到填充信息B,然后导航回/向导继续向导A.

当用户导航到/向导时进行重定向的最佳方法是什么?当wizardB完成时,返回/向导的最佳方法是什么?

对于返回,我可以在url和wizardB控制器中传递一些参数,检查它是否需要转到wizardA,但是无法弄清楚如何进行第一次重定向。

提前致谢。

1 个答案:

答案 0 :(得分:0)

感谢charlietfl获取信息,使用resolve来处理重定向看起来不错!以下是我最终的表现:

var redirect = (returnState: string) => {
        return ['$q', '$timeout', '$state', 'dataModel', ($q, $timeout, $state, dataModel) => {
                var deferred = $q.defer();
                $timeout(() => {
                    if (dataModel.informationB === "") {
                        $state.go('wizardB.input', { rs: returnState });
                        deferred.reject();
                    } else {
                        // everything is fine, proceed
                        deferred.resolve();
                    }
                });

                return deferred.promise;
            }
        ];
    }

并在状态config:

    resolve: {
            redirect: redirect("wizardA.input")
        }