2014-10-30 41 views
1

我想创建一个只能从应用程序代码和链接访问的angularJs路线。主要想法是阻止用户在浏览器的地址栏中直接输入路由URL后访问该页面。 对于路由配置,我使用“ngRoute”模块的$ routeProvider。只允许从应用程序代码/链接访问AngularJS路线

我找不到这个问题的答案。我需要的东西可能吗?

在此先感谢。

回答

1

你可以听$locationChangeStart事件。在你的路线,你可以设置一个参数(我把它叫做“限制”,但你可以把它任何你想要的)是这样的:

app.config(function($routeProvider) { 
    $routeProvider 
    .when('/', { 
     controller: 'MainCtrl', 
     template: 'Allowed from anywhere.<br>Go to main <a href=\"#/main\">page</a>', 
     restricted: false 
    }) 
    .when('/main', { 
     controller: 'MainCtrl', 
     template: 'Allowed from anywhere.<br>Go to restricted <a href=\"#/restr\">page</a>', 
     restricted: false 
    }).when('/restr', { 
     controller: 'RestrictedPageCtrl', 
     template: 'Allowed only from main', 
     restricted: '/main' 
    }); 
}); 

如果是假的,这意味着没有限制,如果它被设置为路径,那么只能从该路径访问路线。你还可以用这个检查:

app.run(function($rootScope, $location, $route) { 
    $rootScope.$on('$locationChangeStart', function(event, next, current) { 
    var nextRoute = $route.routes[$location.path()]; 
    var currentPath = current.split('#')[1]; 
    if (nextRoute.restricted && nextRoute.restricted !== currentPath) { 
     $location.path('/'); 
     alert('You are trying to reach a restricted page!!!!'); 
    } 
    }); 
}); 

你可以改变的行为和用户重定向到另一个链接或防止位置变化与event.preventDefault();

请注意,如果您在链接(html5Mode)中未使用#标签(#),则应更改获取当前链接的方式。

这是plunker

+0

非常感谢。 – 2014-10-31 07:52:25

+0

对不起,我不能upvote,因为我刚刚在这里注册,我还没有足够的投票声望呢。所以我只能接受答案。 – 2014-10-31 11:00:26

相关问题