javascript - 没有标签的 AngularJS 动态路由

标签 javascript angularjs routes angularjs-routing

我正在使用 Angular 构建应用程序,但不确定如何处理动态创建的不包含 # 的 url。我试过 html5Mode true 但这不起作用,因为服务器正在寻找实际目录。

我想要一个在您输入 domain.com 时显示的应用主页信息。用户可以通过 domain.com/john 上可用的管理应用程序创建自定义页面。我下面的代码使用主题标签,但创建了 domain.com/#/和 domain.com/#/john。

如何更改我的代码以实现我想要的结果?当我尝试 html5Mode 时,domain.com/john 转到 404。

app.js

config(['$routeProvider', function($routeProvider) {
    $routeProvider.when('/', {templateUrl: 'views/home.html', controller: 'HomeCtrl'});
    $routeProvider.when('/:user', {templateUrl: 'views/user.html', controller: 'UserCtrl'});
    $routeProvider.otherwise({redirectTo: '/'});
    //$locationProvider.html5Mode(true);
}]);

controller.js

controller('UserCtrl', ['$scope', '$routeParams', function ($scope, $routeParams) {

    var param = $routeParams.user;

}]);

最佳答案

如果您从您的应用程序中到达这些路线之一,它会正常工作,但如果您将其复制并粘贴到您的浏览器地址栏中,您将获得 404,因为服务器不了解如何路由到这些地址,例如,如果您尝试访问 domain.com/john,您将收到错误消息,因为服务器将查找 john.html 页面,而该页面很可能不存在。你可以做的是将你的服务器配置为返回到你的基本页面 home.html 以获取不带 # 的请求,然后 angular 将处理从那里转发你到该路由。

See the docs on HTML5 routing .

Using this mode requires URL rewriting on server side, basically you have to rewrite all your links to entry point of your application (e.g. index.html)

另一种选择(与服务器端 url 重写相比更糟糕的方法)是在路由配置中相对于服务器的根目录为资源提供完全限定的地址,例如

var myRoutingApp = angular.module('routingApp', ['ngResource', 'ngRoute', 'kendo.directives', 'ngGrid'])
    .config(function ($routeProvider, $locationProvider) {
        $routeProvider.when('/', { templateUrl: '../Angular/AngularSeed/app/templates/Home.html', controller: '../Angular/AngularSeed/app/controllers/HomeController' });
        $routeProvider.when('/Companies', { templateUrl: '../Angular/AngularSeed/app/templates/Page1.html', controller: '../Angular/AngularSeed/app/controllers/Page1Controller' });
        $routeProvider.when('/CreateCompany', { templateUrl: '../Angular/AngularSeed/app/templates/Page2.html', controller: '../Angular/AngularSeed/app/controllers/Page2Controller' }); ......
        $locationProvider.html5Mode(true);

        $routeProvider.otherwise({ redirectTo: '/' });
    });

这行得通,但显然不理想。

关于javascript - 没有标签的 AngularJS 动态路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20789399/

相关文章:

正则表达式帮助 - Express 路由 url

javascript - ng hide,如何有条件地显示带有 url 扩展名的 Angular 内容

javascript - 如何使用 MERN 堆栈从我的服务器提供图像

javascript - 使用不显示绝对 url 的 Angular ng-src

javascript - 每次刷新我的页面时,每个字母的颜色都是随机的

javascript - 创建一个包含 colspan 和动态列数的表

javascript - AngularJS 无法路由到不同的页面

.net - WCF服务路由,瓶颈?

laravel - 如何将参数传递给请求中的重定向路由

javascript - 通过 setTimeOut 再次调用 setState 来响应更改状态