gpt4 book ai didi

dynamic - 如何推迟Angular.js中的路由定义?

转载 作者:行者123 更新时间:2023-12-03 08:38:16 24 4
gpt4 key购买 nike

我已经配置了一些基本路由,可供所有用户登录后使用:

App.config(function ($routeProvider) {
$routeProvider.
when('/login', { templateUrl: 'views/login.html', controller: PageStartCtrl.Controller }).
otherwise({ redirectTo: '/login' });
});

因此,用户唯一可以做的就是登录。用户登录后,我想注册其他路由,如下所示:
$http
.post('api/Users/Login', { User: userName, Password: userPassword })
.success(function (response : any) {
App.config(function ($routeProvider) {
$routeProvider
.when('/dashboard',
{ templateUrl: 'part/dashboard.html',
controller: DashboardCtrl.Controller });
});

但是,我想我应该只调用一次.config方法,因为$ routeProvider是一个全新的实例,对/ login路由一无所知。进一步的调试显示,解决 View 更改时,使用了$ resourceProvider的第一个实例。

问:有没有办法以后注册路线?

Add routes and templates dynamically to $routeProvider的解决方案可能有效,但很难看(涉及全局变量 nastyGlobalReferenceToRouteProvider)。

最佳答案

由于路由是在提供商级别定义的,因此通常只能在配置块中定义新路由。问题在于,在配置块中,所有重要服务仍未定义(最著名的是$http)。因此,表面上看起来w无法动态定义路由。

现在,事实证明实际上很容易在应用程序生命周期的任何时候添加/删除路由! 查看$route source code,我们可以看到所有路由定义都被简单地保存在$route.routes哈希中,可以在任何时间点对其进行修改(简化示例):

myApp.controller('MyCtrl', function($scope, $route) {    
$scope.defineRoute = function() {
$route.routes['/dynamic'] = {templateUrl: 'dynamic.tpl.html'};
};
});

这是演示此操作的jsFiddle: http://jsfiddle.net/4zwdf/6/

实际上,如果我们想接近AngularJS所做的事情,则路由定义逻辑应该稍微复杂一点,因为AngularJS还定义了重定向路由以正确处理最后带有 /的路由(使其有效地为可选)。

因此,尽管上述技术可行,但我们需要注意以下几点:
  • 此技术取决于内部实现,如果AngularJS团队决定更改定义/匹配的路由的方式,则该技术可能会中断。
  • 也可以使用otherwise定义$route.routes路由,因为默认路由存储在null
  • 下的同一哈希中

    关于dynamic - 如何推迟Angular.js中的路由定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13153121/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com