【发布时间】:2014-06-11 16:00:37
【问题描述】:
大家好,我遇到了我认为常见的路由问题,但我无法找到解决方案。基本上我的页面有两种状态,基本和高级,我希望两种状态的 URL 模式相同,但只加载当前状态的模板(从控制器内部转换)
config(function ($stateProvider) {
$stateProvider.state('basic', {
url: '/:post',
templateUrl: function (stateParams) {
return 'post-' + stateParams.post + '-tmpl.html';
}
});
$stateProvider.state('advanced', {
url: '/:post',
templateUrl: function (stateParams) {
return 'post-' + stateParams.post + '-advanced-tmpl.html';
}
});
})
controller('myCtrl', function ($state) {
//
// In this case, I would expect only the template from
// the advanced state to load, but both templates are trying
// to load.
$state.transitionTo('advanced', {post: 2});
}
我假设导航到匹配的模式会加载给定的状态,这就是为什么当它匹配时,两个模板都会尝试加载。有什么方法可以实现相同的 url 模式,但仅基于当前状态使用不同的模板?
【问题讨论】:
-
我遇到了同样的问题。我认为 UI 路由器是基于状态的,而不是 URL,但事实恰恰相反
-
您找到解决方案了吗?
-
我注意到,当单击由 ui-sref 实现的此配置(您的高级)中的第二个状态时,第二次会加载正确的模板。 (浏览器地址栏第一次更新)
-
@SamVloeberghs 检查这个问题stackoverflow.com/questions/30900111/…。答案中的解决方案取决于具有相同模式的第一个状态中的 onEnter 定义。因此,如果您假设有 10 个具有相同模式的状态,那么在 onEnter 中您处理所有情况,何时重定向到哪个状态,但这需要每个状态的一些差异化特征,在那个解决方案中我使用了隐藏参数但我们可以使用cookie 或 localStorage 也是如此。也是的,它适用于 ui-sref ,检查run.plnkr.co/plunks/wRqwPr/#
-
看起来像这个问题的重复 - stackoverflow.com/questions/23344055/…
标签: javascript angularjs angular-ui-router