meh*_*dvd 2 single-page-application durandal hottowel durandal-navigation
在我的基于HotTowel的项目中,我使用Durandal 1.1.1进行路由.
我有一个登录路由,如果用户没有登录,我想激活它.
我的路线配置如下:
var routes = [ {
url: 'login',
moduleId: 'viewmodels/login',
name: 'Login',
visible: true,
caption: 'Login'
},{
url: 'moduledetail/:id',
moduleId: 'viewmodels/moduledetail',
name: 'ModuleDetail',
visible: true,
caption: 'ModuleDetail'
}
Run Code Online (Sandbox Code Playgroud)
我想如果用户想去,#/moduledetail/1并且尚未经过身份验证,浏览器会导航到路由,#/login/moduledetail/1因此在成功登录路由后返回到#/moduledetail/1.
一个可能的解决方案是将一个navigateTo在canActivate的moduledetail,如:
function canActivate()
{
if (!loggedIn)
router.navigateTo(`#/login/moduledetail/1`)
return false;
}
Run Code Online (Sandbox Code Playgroud)
但导航到另一页canActivate似乎是如此愚蠢.
是否有任何方法告诉Durandal在路由时,在这种情况下使用这条路线?
在Durandal 2.0中,这是使用router.guardRoute实现的:
auth = require('auth');
router.guardRoute = function(model, route) {
return auth.loggedIn() || '#/login';
};
Run Code Online (Sandbox Code Playgroud)
从我读过的内容来看,虽然没有记载,但在Durandal 1.x中,这种行为也是如此.Guard路由是在加载viewModel之后但在视图模型上调用activate之前调用的函数.如果为true,则路由继续.如果是字符串,路由器会尝试导航到与该字符串关联的路由.
| 归档时间: |
|
| 查看次数: |
2380 次 |
| 最近记录: |