1

クエリ文字列を保持したくない場合、AngularJS でルートの変更を超えてクエリ文字列を保持することに問題があります。この問題を再現するために plunker (以下) を作成しましたが、この質問に記載されているように、クエリ文字列は通常、ルートの変更後も保持されないことがわかります。

http://plnkr.co/edit/SD8QMdSeAfAnVP3ZNHK4?p=preview

var demo = angular.module('demo', ['ngRoute']);

demo.config(function ($routeProvider) {

  $routeProvider.when('/page1', {
    template:
"<h1>{{ctrl.title}}</h1>" +
"<ul>" +
"<li>Page 1</li>" +
"<li><a href=\"#/page2/Title\">Page 2</a></li>" +
"</ul>" +
"<p>{{ctrl.currentUrl}}</p>" +
"<p>{{ctrl.queryString}}</p>",
    controller: 'Page1',
    controllerAs: 'ctrl'
  });

  $routeProvider.when('/page2/:param', {
    template:
"<h1>{{ctrl.title}}</h1>" +
"<ul>" +
"<li><a href=\"#/page1\">Page 1</a></li>" +
"<li>Page 2</li>" +
"</ul>" +
"<p>{{ctrl.currentUrl}}</p>" +
"<p>{{ctrl.queryString}}</p>" +
"<button ng-click=\"ctrl.appendQS()\">Append query string</button>",
    controller: 'Page2',
    controllerAs: 'ctrl'
  });

  $routeProvider.otherwise({ redirectTo: '/page1' });

});

demo.controller('Page1', function Page1($location) {
  this.title = 'Page 1';
  this.currentUrl = $location.url();
  this.queryString = $location.search();
});

demo.controller('Page2', function Page2($routeParams, $location) {
  this.title = $routeParams.param;
  this.currentUrl = $location.url();
  this.queryString = $location.search();
  this.appendQS = function () {
    $location.search('foo', 'bar');
  };
});

AngularJS 1.3 にアップグレードしたばかりですが、以前のバージョンの 1.2.(12|24) でも同じ動作が見つかりました。残念ながら、問題のあるソース コードは独自のものであるため、問題の原因となっている正確なコードを共有することはできません。

私はすべてを試しましたが、Angular ソースにデバッグして、クエリ文字列がルートの変更後も持続する理由を見つけました。他の誰かがこの問題に遭遇したか、それをオフにする方法を知っていますか?

アップデート

私のリンクの多くには実際に一部のクエリ文字列パラメーターのデフォルト値が含まれているため、クエリ文字列を単純に削除するなどのソリューションは機能しないことに注意してください。

4

1 に答える 1