3

我正在尝试有条件地阻止路由被访问。我认为这可以通过guardRoute来完成:http: //durandaljs.com/documentation/Router/

function guardRoute(routeInfo, params, instance) : object- 在激活任何路由之前,会调用guardRoute 函数。您可以插入此功能以添加自定义逻辑以根据请求的路由允许、拒绝或重定向。要允许,请返回 true。要拒绝,请返回 false。要重定向,请返回带有哈希或 url 的字符串。你也可以为这些值中的任何一个返回一个承诺。

我不确定如何指定应该访问哪个路由,或者如果我需要拒绝访问,如何重新路由到另一个视图。有人可以以这种方式发布其使用示例吗?

4

2 回答 2

6

您应该guardRoute在激活路由器之前使用,例如在shell.js. 该示例取自 Durandal 2.0 alpha 站点。AFAIKguardRoute 与 1.2 相比没有变化,但设置断点将允许您确定为 1.2 传入了哪些参数。作为一般规则,返回true以允许导航,false以防止它和一个hashurl值重定向。

define(['plugins/router'], function (router) {

    // Redirecting from / to first route in route.map
    router.guardRoute = function(routeInfo, params, instance){
        if (params.fragment === ''){
            return routeInfo.router.routes[0].hash;
        }
        return true;
    };
    ...    

    return {
        ...
        router: router,
        activate: function () {
            router.map([
               ---
            ]);

            return router.activate();
        }
    };
});
于 2013-06-13T15:06:33.073 回答
1

我是 durandaljs 2.0 的新手,只使用了几周,所以这是我的第一个绊脚石。在下面查看我的代码

router.guardRoute = function (routeInfo, params, instance) {
    var insecureRoutes = ['login', 'terms','signup','password'];
    if ($.inArray(params.fragment, insecureRoutes) || mymodule.isAuthenticated()) {
        return true;
    } else {
        return 'login/' + params.fragment;
    }
};

我还像这样为登录页面定义了一个路由

{ route: 'login/(:returnroute)', moduleId: 'viewmodels/login', nav: false },

这使您可以选择指定返回路线,以便在登录后您可以将用户重定向到他们最初尝试去的地方。我希望它可以帮助某人

于 2013-10-28T19:38:39.337 回答