【发布时间】:2024-03-09 08:45:02
【问题描述】:
编辑:简而言之问题
在使用 hasbang 方法时,向 URL 添加多个参数后,Angular 路由会中断。
我对 AngularJS ui-routing 有疑问,由于某种原因,当我想使用“漂亮的 URL”时,路由只能部分工作,我在这些论坛上查找了许多教程和线程,但我找不到任何解决方案。
我有一个类似这样的应用程序:https://scotch.io/tutorials/angular-routing-using-ui-router,
我所做的唯一更改是,我在 index.html 文件的 <head> 中添加了 <base href="/">。
默认情况下它工作正常,但在 url 中总是有 hastag 所以 url 看起来像
http://ag-routing.lc/#/home
但我希望它看起来像这样
http://ag-routing.lc/home
在你开始反对我说这是重复之前,问题来了:
在我查看的每个论坛上,这应该是解决方案,将其粘贴到您的配置中,奇迹就会发生。
$locationProvider.html5Mode(true);
这就是我的 app.js 与 hasbang 代码的样子
// app.js
var routerApp = angular.module('routerApp', ['ui.router']);
routerApp.config(function($stateProvider, $urlRouterProvider, $locationProvider) {
$locationProvider.html5Mode(true);
$urlRouterProvider.otherwise('/home');
$stateProvider
// HOME STATES AND NESTED VIEWS ========================================
.state('home', {
url: '/home',
templateUrl: 'partial-home.html'
})
......
现在 # 不见了,但是如果我刷新页面,我会得到一个奇怪的结果或 404。所以我再次查找解决方案并发现,您必须添加此代码转至 .htaccess (source)
RewriteEngine on
# Don't rewrite files or directories
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
# Rewrite everything else to index.html to allow html5 state links
RewriteRule ^ index.html [L]
是的,现在它也适用于刷新和直接链接,但这是 我找不到解决方案的真正问题:
当我点击页面刷新时
http://ag-routing.lc/home
它工作正常,但是当我直接(或通过刷新)页面时
http://ag-routing.lc/home/paragraph
简单地说,第二个“/”会破坏页面,它会停止工作,我不知道为什么,我唯一发现的是,当我在 chrome 中打开控制台时,我真的很奇怪结果如:
app.js:3 Uncaught SyntaxError: Unexpected token <
angular.js:3660 Uncaught Error: [$injector:modulerr] Failed to instantiate module routerApp due to:
Error: [$injector:nomod] Module 'routerApp' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.
http://errors.angularjs.org/1.2.13/$injector/nomod?p0=routerApp
at https://code.angularjs.org/1.2.13/angular.js:78:12
at https://code.angularjs.org/1.2.13/angular.js:1531:17
at ensure (https://code.angularjs.org/1.2.13/angular.js:1456:38)
at module (https://code.angularjs.org/1.2.13/angular.js:1529:14)
at https://code.angularjs.org/1.2.13/angular.js:3632:22
at Array.forEach (native)
at forEach (https://code.angularjs.org/1.2.13/angular.js:304:11)
at loadModules (https://code.angularjs.org/1.2.13/angular.js:3626:5)
at createInjector (https://code.angularjs.org/1.2.13/angular.js:3566:11)
at doBootstrap (https://code.angularjs.org/1.2.13/angular.js:1301:20)
http://errors.angularjs.org/1.2.13/$injector/modulerr?p0=routerApp&p1=Error…trap%20(https%3A%2F%2Fcode.angularjs.org%2F1.2.13%2Fangular.js%3A1301%3A20)
最令人震惊的是,当我在资源中打开 app.js 时,js 代码消失了,它被 index.html 中的 HTML 取代 ಠ_ಠ
对英语不好的任何帮助表示赞赏和抱歉...
顺便说一句,当我使用 ng-route 而不是 ui-route 时,问题仍然存在。
编辑: 我发现当我将 locationProvider 设置为 false 并点击刷新时,url 变成了这个东西,看起来错了:
http://ag-routing.lc/about#/about
【问题讨论】:
-
你检查过ui-router FAQ的这一部分吗? github.com/angular-ui/ui-router/wiki/…
-
另外,您是否在 apache 配置中正确设置了 DocumentRoot 和 Directory?
-
@M21B8 试图删除基本标签,但它仍然不起作用......是的,我相信 apache 设置正确,我的虚拟主机 DocumentRoot 指向我的应用程序的文件夹。
DocumentRoot "D:\xampp\htdocs\angular\uiRouter" ServerName ag-routing.lc -
我相信重写应该在 VirtualHost 声明中。确保配置看起来像这里详述的配置:github.com/angular-ui/ui-router/wiki/…
-
@M21B8 不幸的是,这也不起作用。
标签: javascript angularjs .htaccess angular-ui-router