2016-10-06 3 views
0

$locationサービスを使用するコントローラがありますが、ブラウザがサポートしていない場合はHTML5モードでのみ使用する必要があります。history.pushstateコントローラからサービスを省略したいURLを/#/2016-17に書き換えず、代わりにルーティングを行いません。しかしコントローラに$locationを注入すると、自動的にhashbangメソッドを使用してルーティングされます。参照のために、以下の特定のブラウザでサービスにコントローラを注入する

コード:

function SearchAdvancedController($location) { 
    $location.url("/", false); 
} 

function config($locationProvider) { 
    $locationProvider.html5Mode({ 
    enabled: true, 
    rewriteLinks: false, 
    requireBase: false 
    }); 
} 

任意のアイデア?

ありがとうございます。

+0

角度は主にSPA向けです。ブラウザが 'history.pushstate'をサポートしていない場合、毎回あなたのアプリをリロードしたいですか? –

+0

@SteevePitis私はそれが何もしたくない、場所が重要な機能ではない、それが使用されているのは、古いブラウザーの重要な機能ではないユーザーの検索時にURLを変更することです。 –

答えて

0

if..elseのようなサービスが存在するかどうかをチェックする必要がない限り、コントローラにサービスを注入する必要があります。行うための単純なことは、URLを変更するには、独自のサービスを定義し、条件付きで、それは何もしないことです。

module.service('MyLocation', function ($location) { 
    this.url = function() { 
     if (/* browser supports pushstate */) { 
      $location.url.apply($location, arguments); 
     } 
    }; 
}); 

function SearchAdvancedController(MyLocation) { 
    MyLocation.url('/', false); 
} 

あなたも、この目的のためにdecoratorsで遊んすることをお勧めします。

+0

これは適用されますか?ページの読み込みにも –

+0

意味はなんですか? – deceze

+0

$場所はまだ注入されていますか? –

関連する問題