2015-05-04 82 views
1

我建立了我的$stateProvider如下:UI路由器無法識別URL

app.config(function($stateProvider,$urlRouterProvider,$locationProvider, $httpProvider){ 
    $stateProvider.state('localitySearch',{ 
     url: '/venues/in/:cityName/:localityName/:localityId/', 
     templateUrl: 'static/partials/localitysearch.html', 
     controller: 'localitySearchCtrl' 
    }); 
    $urlRouterProvider.otherwise('/'); 
    $locationProvider.html5Mode(true).hashPrefix('!'); 
    $httpProvider.defaults.xsrfCookieName = 'csrftoken'; 
    $httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken'; 
}); 

當我試着打:

/venues/in/CityName/LocalityName/LocalityId/,它重定向到主頁。

如果使用常規的ngRoutes,則相同的代碼有效。有沒有我錯過了阻止url重定向?

+0

你嘗試之後'/!/場地/中/ CITYNAME /處所名稱/ LocalityId /'打? –

+0

@ArpitSrivastava,我實際上試圖使用HTML5Mode,所以在我的URL中沒有'!'。 – Newtt

+0

檢查此URL http://stackoverflow.com/questions/16677528/location-switching-between-html5-and-hashbang-mode-link-rewriting –

回答

2

該概念正在工作。有a working plunker

所以用這個狀態定義(幾乎與上面相同)

$urlRouterProvider.otherwise('/home'); 

$stateProvider 
    .state('localitySearch',{ 
    url: '/venues/in/:cityName/:localityName/:localityId/', 
    templateUrl: 'static/partials/localitysearch.html', 
    controller: 'localitySearchCtrl' 
    }) 
    .state('home', { 
    url: "/home", 
    templateUrl: 'tpl.html', 
    }) 

$locationProvider.html5Mode({enabled:true, requireBase: false}).hashPrefix('!'); 
$httpProvider.defaults.xsrfCookieName = 'csrftoken'; 
$httpProvider.defaults.xsrfHeaderName = 'X-CSRFToken'; 

這些鏈接將工作:

// href 
<a href="{{plnkr}}venues/in/cityName/localityName/localityId/"> 
// ui-sref 
<a ui-sref="localitySearch({cityName:'Liberec', localityName:'Czech', localityId:'CZ'})" 

注:{{plnkr}}只是一種方式如何知道生成的網址:

.run(['$rootScope', 
    function ($rootScope,) { 
    $rootScope.plnkr = document.location.pathname; 
}]) 

檢查它在行動here

+0

我正在使用'window.location.href'在某些地方改變了URL。當我轉移到'$ state.go'時,所有的功能都正常啓動。奇怪的行爲。 – Newtt