AngularJS - 为啥更改 url 地址时 $routeProvider 似乎不起作用并且我收到 404 错误

Posted

技术标签:

【中文标题】AngularJS - 为啥更改 url 地址时 $routeProvider 似乎不起作用并且我收到 404 错误【英文标题】:AngularJS - Why when changing url address $routeProvider doesn't seem to work and I get a 404 errorAngularJS - 为什么更改 url 地址时 $routeProvider 似乎不起作用并且我收到 404 错误 【发布时间】:2013-02-21 09:44:27 【问题描述】:

我的$routeProvider 是这样配置的:

teachApp.config(['$routeProvider', '$locationProvider', function($routeProvider,       $locationProvider) 
    $routeProvider.
        when('/teach/', templateUrl: 'views/login_view.html').
        when('/teach/overview', templateUrl: 'views/overview_view.html').
        when('/teach/users', templateUrl: 'views/users_view.html').
        otherwise(redirectTo: '/teach/');
    $locationProvider.html5Mode(true);
]);

在应用程序中,如果我单击 <a href="/teach/overview">Overview</a> 之类的链接,概览部分将按预期显示。但是,当我手动将地址栏中的 URL 更改为完全相同的 URL 时,我收到 404 错误。 $routeProvider 是否配置错误?

我正在使用 MAMP localhost,应用的根 url 为 http://localhost/teach/

【问题讨论】:

【参考方案1】:

您也可以在 URL 中使用 #。

http://localhost/teach/#/overview

这不会向服务器发送请求,而是被 Angular $routeProvider 拦截。

【讨论】:

这是一个不错的简单解决方案。【参考方案2】:

您需要将您的 apache 设置为 redirect all paths to root。

当您直接打开http://localhost/teach/overview 时,您的网络服务器正在尝试从未定义的路由提供页面。

当您在 Angular 应用程序中单击 href 路径为 http://localhost/teach/overview 的链接时,Angular 会介入,而不是让您的浏览器从服务器请求页面,而是拦截您的点击事件并转到您的 routeProvider 以查看要显示的客户端视图(这就是他们称之为“单页应用程序”的原因)。这就是为什么只要您尝试不直接打开链接,您的链接就可以正常工作。

除了 apache 配置,您可能还想使用带有 href 值为 /teach/base 标签:

<base href="/teach/" />

这样您就可以让您的 routeProvider 不受固定前缀的约束:

teachApp.config(['$routeProvider', '$locationProvider', function($routeProvider,       $locationProvider) 
    $routeProvider.
        when('/', templateUrl: 'views/login_view.html').
        when('/overview', templateUrl: 'views/overview_view.html').
        when('/users', templateUrl: 'views/users_view.html').
        otherwise(redirectTo: '/');
    $locationProvider.html5Mode(true);
]);

【讨论】:

以上是关于AngularJS - 为啥更改 url 地址时 $routeProvider 似乎不起作用并且我收到 404 错误的主要内容,如果未能解决你的问题,请参考以下文章

在angularjs中通过history.replacestate更改url时如何停止页面刷新?

使用$ http.get()时,Angularjs url正在被更改。然后()

AngularJS UI-Router:带参数获取状态的绝对 URL

Daterangepicker更改angularjs

为啥一旦点击 Uber Eats 上的按钮,Playwright 就不会更改 url?

更改 URL 而不删除 Angularjs 中的历史记录