ui-路由器导航到另一个状态 onEnter
ui-router navigate to another state onEnter
我有一个收集信息A的向导流程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 的结构相似。
我想做的是当用户导航到/wizard时,它检查informationB是否被填充,如果没有,先导航到填充informationB,然后导航回/wizard继续wizardA。
当用户导航到 /wizard 时进行重定向的最佳方法是什么,以及当 wizardB 完成时 return 到 /wizard 的最佳方法是什么?
对于 return,我可以在 url 中传递一些参数,并在 wizardB 控制器中检查它是否需要转到 wizardA,但不太清楚该怎么做第一个重定向。
提前致谢。
感谢 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;
}
];
}
并且在状态配置中:
resolve: {
redirect: redirect("wizardA.input")
}
我有一个收集信息A的向导流程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 的结构相似。
我想做的是当用户导航到/wizard时,它检查informationB是否被填充,如果没有,先导航到填充informationB,然后导航回/wizard继续wizardA。
当用户导航到 /wizard 时进行重定向的最佳方法是什么,以及当 wizardB 完成时 return 到 /wizard 的最佳方法是什么?
对于 return,我可以在 url 中传递一些参数,并在 wizardB 控制器中检查它是否需要转到 wizardA,但不太清楚该怎么做第一个重定向。
提前致谢。
感谢 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;
}
];
}
并且在状态配置中:
resolve: {
redirect: redirect("wizardA.input")
}