Javascript 使用angular.js在AJAX中加载内容时,如何更改浏览器地址栏中的url
我正在用angular.js设计一个web应用程序,应用程序内的通信是通过AJAX进行的,这意味着当应用程序请求web资源时,url浏览器地址永远不会更改 例如,我的应用程序正在显示建筑信息。最初的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时,浏览器
'/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会在浏览器的地址栏中更改,浏览器会停留在当前页面上(即,它不会尝试定位到地址)。