2016-10-06 153 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我不希望它做任何事情,$ location不是一個重要的功能,它用於的所有功能都是當用戶搜索時更改URL,這不是舊版瀏覽器的關鍵功能 –

回答

0

您應該始終將服務注入您的控制器,除非您需要很多if..else條件來檢查服務是否存在。最簡單的事情就是定義自己的服務來改變的網址,並有條件地有它什麼都不做:

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

$ location是否仍在注入? –