2015-12-10 21 views
2

我的UI路由器狀態提供商設置像這樣:AngularJS UI路由器:UI-SREF鏈接在HREF值填充時不預先考慮哈希

.state(
    'events', { 
     url: '/events', 
     templateUrl: ..., 
     controller: ... 
    }) 
.state(
    'events.listEvents', { 
     url: '/list', 
     templateUrl: ..., 
     controller: ... 
    }) 
.state(
    'events.eventDetails', { 
     url: '/details', 
     templateUrl: ..., 
     controller: ... 
    }) 


我開始events.listEvents狀態,所以我的URL看起來像這樣:

https://baseUrl.com/home#/events/list 

,我有像這樣的頁面上的鏈接:

<a ui-sref="events.eventDetails">event details</a> 

當我只需點擊正常鏈接,它工作正常和路線我到一個頁面的網址:

https://baseUrl.com/home#/events/details 

但是當我試圖打開一個新的標籤相同的鏈接(或當我點擊右鍵並複製的「href」鏈接地址),這是不正確的:

https://baseUrl.com/events/details 



所以問題1上是:爲什麼ui-sref填寫了錯誤的值?爲什麼它完全缺少它生成的URL中的散列? (是的,我已經嘗試啓用/禁用$ locationProvider.html5mode,但這並沒有這方面的任何影響。)

+0

爲什麼' 「events.listEvents」URL中的/ home?user = jeff'? – tommyd456

+0

這只是爲了說明應用程序有一個基本URL(在這種情況下是'/ home'),它隨着ui路由器狀態的改變而保持不變。當你在狀態之間切換時,'/ home'保持不變,只有#井號後面的內容發生變化。如果您願意,您可以忽略'?user = jeff' - 它是基本URL的一部分,所以在您瀏覽應用程序時它會保持不變。 – Dasmowenator

+0

編輯:我在這裏清理了我的示例URL,使其更容易閱讀 – Dasmowenator

回答

3

我將此添加到我的主要app.js作爲一種解決方法:

.run(['$state', 
    function($state) { 
     $state.originalHrefFunction = $state.href; 
     $state.href = function href(stateOrName, params, options) { 
      var result = $state.originalHrefFunction(stateOrName, params, options); 
      if (result && result.slice(0, 1) === '/') { 
       return '#' + result; 
      } else { 
       return result; 
      } 
     } 
    } 
])