Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用angular.js在AJAX中加载内容时,如何更改浏览器地址栏中的url_Javascript_Angularjs - Fatal编程技术网

Javascript 使用angular.js在AJAX中加载内容时,如何更改浏览器地址栏中的url

Javascript 使用angular.js在AJAX中加载内容时,如何更改浏览器地址栏中的url,javascript,angularjs,Javascript,Angularjs,我正在用angular.js设计一个web应用程序,应用程序内的通信是通过AJAX进行的,这意味着当应用程序请求web资源时,url浏览器地址永远不会更改 例如,我的应用程序正在显示建筑信息。最初的url是'/buildings',首先它将显示房间列表 '/buildings/rooma' '/buildings/roomb' 无论何时单击房间url,页面都会通过AJAX加载房间信息,而不会更改浏览器地址栏中的url 但是现在要求我为每个url添加书签,这意味着每当我单击房间url时,浏览器

我正在用angular.js设计一个web应用程序,应用程序内的通信是通过AJAX进行的,这意味着当应用程序请求web资源时,url浏览器地址永远不会更改

例如,我的应用程序正在显示建筑信息。最初的url是
'/buildings'
,首先它将显示房间列表

'/buildings/rooma'
'/buildings/roomb'

无论何时单击房间url,页面都会通过AJAX加载房间信息,而不会更改浏览器地址栏中的url

但是现在要求我为每个url添加书签,这意味着每当我单击房间url时,浏览器地址栏也必须显示房间url,而不是初始url

我如何在angularjs或甚至没有angularjs框架的情况下实现它

更新:

我尝试了乌博斯贝伦提出的解决方案

$scope.$on('$locationChangeSuccess',function(evt, absNewUrl, absOldUrl) {
       console.log('success', evt,  lastRoute,$route.current);
       $route.current = lastRoute;
    });

但是$route.current给了我未定义的数据。

我尝试使用google,我发现使用url pushstate是一个很好的方法

它太复杂了,无法编写一个完整的工作演示,所以你可能想用谷歌搜索它

这里有一篇很好的文章:

更新:
pushstate将更改浏览器中的url,以便用户可以将页面添加到书签中

您还需要监听popstate:

window.addEventListener("popstate", function(e) {  console.log(arguments) })

因此,当用户按下后退/前进按钮时,您可以做出反应。

只需使用ngRoute即可,您可以在angular doc上看到显示$routeProvider.when(“/”)的示例。您还需要在服务器端执行mod rewrite来路由您的请求。请用更多的代码更新您的问题,这样我就可以提供帮助。我已经尝试过该解决方案,请参阅更新,但值未定义这是我想要的有用功能,但另一个重要的问题是如何更改浏览器地址栏中的url?pushstate将更改浏览器地址栏中的url。用户可以将其添加书签。如果这有帮助或回答了您的问题,通常会标记答案或接受答案。嗨,brian,推送状态通过添加查询字符串来更改url,是吗?是的,推送状态接受对象,属性之一是url。url会在浏览器的地址栏中更改,浏览器会停留在当前页面上(即,它不会尝试定位到地址)。