【发布时间】:2013-12-21 17:03:29
【问题描述】:
我的应用程序基于单页模型。我正在使用 JQuery History 对象来更改 URL,以便如果用户刷新应用程序,那么当用户刷新浏览器时我可以保留应用程序的位置。它工作得很好,但不知何故它停止了工作。经过分析,我发现 Angular.js 正在将修改后的 URL(由 Jquery History API 修改)更改为原始 URL(用于启动应用程序的 URL)。我很惊讶和困惑为什么突然 Angular JS 开始重置 URL。我尝试了很多,但找不到任何根本原因。请帮助并建议其他可能的方法,以在浏览器刷新(或后退按钮)上保留用户位置。以下是更多详细信息。
//Change the browser state to support History to launch file. It will remove projectid from URL and will add fileid
function updateBrowserStateOnFileLaunch(fileId, pageTitle, stateCounter)
{
//Get current URL
var finalURL = getNormalizedHashedURL("");
//Remove projectid query string from paramter if it has and update/add fileid
finalURL = updateQueryStringParameters(finalURL, [{key:"projectid", value:undefined}, {key:"fileid", value:fileId}]);
//Change history
History.pushState({state:stateCounter,rand:getTimestampId()}, pageTitle, finalURL);
}
注意:不添加有关“getNormalizedHashedURL”和“updateQueryStringParameters”方法的详细信息以保持帖子小。
我正在使用 ng-if 根据状态更改视图。
<!-- File editor view -->
<div data-ng-if="currentView === 3">
<!-- Project File view-->
</div>
在调试期间,我看到 angular.js 在执行以下行后正在重置 URL。
我的应用程序中尝试从服务器获取数据的代码:
//get list of templates by making server call using Angular $resource object
Template.query({projectid: project._id}, function(response) {
//Processing of response
});
angular.js 中正在重置 URL 的代码:
$apply: function(expr) {
try {
beginPhase('$apply');
return this.$eval(expr);
} catch (e) {
$exceptionHandler(e);
} finally {
clearPhase();
try {
$rootScope.$digest(); **//At this line I find that URL is getting reset**
} catch (e) {
$exceptionHandler(e);
throw e;
}
}
},
请帮忙。
【问题讨论】:
标签: jquery angularjs angular-resource