gpt4 book ai didi

javascript - 路由和清洁路径(无主题标签)在 angularJS 中不起作用

转载 作者:行者123 更新时间:2023-11-28 22:00:08 24 4
gpt4 key购买 nike

伙计们,这让我发疯,为此奋斗了几个小时,却找不到解决方案!

我知道为了从 URL 路径中清除主题标签,我需要使用

$locationProvider.html5Mode(true);

但出于某种原因,这对我来说效果不佳,我正在使用 tomcat 7 btw 来运行它。

这些是我的 HTML 导入,两个 AngularJS 的东西都是 v1.2.6:

    <script type="text/javascript" src="angular/angular.min.js"></script> 
<!-- Angular Libraries -->
<script type="text/javascript" src="angular/angular-route.js"></script>
<!-- This one handles the alert notifications -->
<script type="text/javascript" src="angular/angular-flash.min.js"></script>

<!-- App related libraries -->
<script type="text/javascript" src="js/services/portfolioServices.js"></script>
<script type="text/javascript" src="js/controllers/myWorkControllers.js"></script>
<script type="text/javascript" src="js/controllers/navController.js"></script>
<script type="text/javascript" src="js/controllers/aboutController.js"></script>
<script type="text/javascript" src="js/controllers/contactController.js"></script>
<script type="text/javascript" src="js/directives/portfolioDirectives.js"></script>

然后这是我的带有配置的服务 javascript

portfolioApp = angular.module('portfolioApp', ['ngRoute']);

portfolioApp.config(['$routeProvider', '$locationProvider', function($routeProvider, $locationProvider) {
$routeProvider
.when('/mywork', {
templateUrl: 'partials/mywork.htm',
controller: 'myWorkController'
})
.when('/about', {
templateUrl: 'partials/about.htm',
controller: 'aboutController'
})
.when('/contact', {
templateUrl: 'partials/contact.htm',
controller: 'contactController'
})
.otherwise({redirectTo: '/mywork'});
$locationProvider.html5Mode(true);
}]);

这些 Controller 中的每一个都只是定义的,没有什么特别的,名称和注入(inject) $scope 的函数。他们什么都没有。

基本上,不使用 html5Mode 的 URL 是

http://localhost:8080/template/#/

我想成为:

http://localhost:8080/mywork
http://localhost:8080/about
http://localhost:8080/contact

现在,我可以让它工作...通过访问 http://localhost:8080/template 它被重定向到上面的那些 url...但是当我使用 Ctrl 刷新页面时+F5,我收到 404 Not Found from Tomcat! :S 怎么会?路径不应该用 Angular 来解决?

请问我在这里做错了什么?我真的很生气哈哈

顺便说一句,以防万一你想知道我的项目目录是怎样的,下面是它的截图:

http://puu.sh/5UI0Z.png

这是我当前的 web.xml

<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Portfolio Application</display-name>

<!-- Auto scan rest service -->
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>

<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/rest</param-value>
</context-param>

<listener>
<listener-class>
org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>


<servlet>
<servlet-name>resteasy-servlet</servlet-name>
<servlet-class>
org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>resteasy-servlet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>

</web-app>

提前致谢。

最佳答案

当您按下 F5 键时,您并未使用 Angular Directive(指令)或任何与 Angular 相关的指令。您只需告诉浏览器向当前地址栏中的 URL 发送一个新请求,并使用从服务器返回的内容刷新页面。所以如果当前位置是http://localhost:8080/mywork,一个请求会发送到http://localhost:8080/mywork,如果服务器没有任何配置来处理这个 URL,你会得到一个 404。

现在,如果您将服务器配置为在点击 URL /mywork 时返回主 Angular HTML 页面,那么浏览器将显示此 HTML 页面并执行其中包含的 JavaScript。 Angular router 会检测到位置是/mywork,因此它会加载与该位置关联的部分和 Controller ,并显示适当的模板。

旧的、基于 hashbang 的路由不需要任何后端配置,因为 URL 总是相同的。只有 hashbang 之后的部分(服务器未知)发生变化。

关于javascript - 路由和清洁路径(无主题标签)在 angularJS 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20727602/

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