Javascript 使用ngview时有没有办法避免更改URL地址栏

Javascript 使用ngview时有没有办法避免更改URL地址栏,javascript,html,angularjs,Javascript,Html,Angularjs,在示例中,ng view指令不会更改地址栏中的URL。但是,当我将此示例移植到我的应用程序时,在每次单击时,栏中的地址都会更改为“href”链接标记中的URL,即使我放置了一个相对URL(如示例所示) 我的html代码 <div ng-view></div> <div class="navHeader"> <ul id="navItems" ng-controller="Departments"> <li ng-re

在示例中,
ng view
指令不会更改地址栏中的URL。但是,当我将此示例移植到我的应用程序时,在每次单击时,栏中的地址都会更改为“href”链接标记中的URL,即使我放置了一个相对URL(如示例所示)

我的html代码

<div ng-view></div>

<div class="navHeader">
    <ul id="navItems" ng-controller="Departments">
        <li ng-repeat="department in departments">
            <a href="{{department.url}}">
                {{department.name}}
            </a>
        </li>
    </ul>
</div>

答案是否定的。
ng视图
的目的是基于当前URL位置更新模板。这相当于更换页面

如果您想执行与链接的示例类似的操作,那么您应该研究使用
ng开关

编辑因此评论而更新:

我对此表示怀疑,因为每当有人刷新页面时,它只显示服务返回的JSON。这是因为地址栏中填充了RESTful服务的URL,而不是保留页面URL

发生这种情况的原因是因为您使用的是html pushstate历史API(使用google!),也称为
html5mode
。这意味着无论出于什么目的,你都在告诉浏览器你已经加载了一个不同的页面,尽管实际上根本没有改变页面。当您点击刷新时,浏览器会请求地址栏中的url,在您的情况下,服务器会用JSON响应该url

一个快速修复方法是在应用程序的
.config
功能中关闭
HTML5模式

$locationProvider.html5Mode(false);
这将恢复为使用哈希sytax,例如“path.to.your.site/#/about”。它看起来没那么漂亮,但它应该能胜任。Angular将使用您定义的前缀作为任何相对链接的前缀


更好的选项是修改您的服务器,使您的rest api位于前缀下,例如
/api/
,然后对于所有不是
/api/*
的请求,返回index.html页面。Angular在那之后处理布线。这意味着您可以两全其美—您的地址看起来更漂亮(它们没有任何#),但刷新等工作正常。

您的代码在哪里?
在本例中,ng view指令不更改URL
。当然它会改变,你只是看不见而已,因为它是iframe。有没有其他方法可以避免更改URL地址栏?您可以分配一个ng click函数,该函数传入department.URL,然后运行get函数。这无法完成,因为控制器是由路由处理的,因此无法在SPA中使用ng view和restful服务?您是如何得出这个结论的?SPA在后端非常依赖一个好的RESTful API。我的意思是
ng view
SPA和RESTful一起使用。我对此表示怀疑,因为每当有人刷新页面时,它只显示服务返回的JSON。这是因为地址栏中填充了RESTful服务的URL,而不是保留页面URL。不是吗?不确定这是否适用于jersey,不容易重定向到它的index.html。我的restful服务在localhost:8080/app/service/*下,URL仍然更改为localhost:8080/app/#/service/,看起来非常难看,无法解决问题。你应该访问
localhost:8080/app
,并且只向
localhost:8080/app/service/*
发出AJAX请求。您的链接都应该是相对的,这意味着您的URL将更改为:
localhost:8080/app/#/dept/:id
。我从未使用过Jersey,但您无论如何都不想重定向,您应该返回index.html而不重定向。任何好的http服务器都应该能够轻松做到这一点。
$locationProvider.html5Mode(false);