/ / AngularjsはURLを元の問題に戻しています-jquery、angularjs、angular-resource

AngularjsはURLを元の問題に戻しています-jquery、angularjs、angular-resource

私のアプリケーションは、単一ページモデルに基づいています。 ユーザーがアプリケーションを更新した場合、ユーザーがブラウザを更新したときにアプリケーションの位置を保持できるように、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
});

URLをリセットしているangular.jsのコード:

 $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;
}
}
},

助けてください。

回答:

回答№1は6

から AngularJSでURL操作をオフにする

angular.module("sample", [])
.config( ["$provide", function ($provide){
$provide.decorator("$browser", ["$delegate", function ($delegate) {
$delegate.onUrlChange = function () {};
$delegate.url = function () { return ""};
return $delegate;
}]);
}]);