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

时间:2014-03-10 13:39:27

标签: javascript angularjs

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

例如,我的应用程序正在显示建筑信息。初始网址为'/buildings',首先会显示房间列表

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

每当我点击房间网址时,页面都会通过AJAX加载房间信息而不更改浏览器地址栏中的网址

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

我怎么能在angularjs中甚至没有angularjs框架呢?

更新:

我尝试过ĽubošBeran建议的解决方案

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

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

2 个答案:

答案 0 :(得分:1)

执行此操作的好方法是使用url pushstate。

写一个完整的工作演示太复杂了,所以你可能想谷歌。

这是一篇很好的文章:http://www.sitepoint.com/javascript-history-pushstate/

更新

pushstate将更改浏览器中的url,因此用户可以为该页面添加书签。

您还需要收听popstate:

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

所以当用户按下后退/前进按钮时你可以做出反应。

答案 1 :(得分:0)

好吧,我尝试使用谷歌,我发现这个AngularJS Paging with $location.path but no ngView reload