2014-01-10 57 views
10

我在項目中使用基於狀態的路由(Angular UI路由器v0.2.7)並尋找一種方法從給定的URL字符串獲取當前狀態(名稱)。從URL字符串獲取狀態與Angular UI路由器

喜歡的東西:

$state.get([urlString]) returns stateName:String or state:Object 

我需要這個方法來檢查,因爲並不是所有的URL映射到我的項目狀態的狀態存在於一個給定的URL。使用Play Framework作爲後端,一些URL(例如,登錄表單)不會映射到狀態,因爲它們使用不同的模板,然後是我的應用程序的Angular(主要)部分。 對於那些「無角」頁面(即不包含在狀態中),我會重新加載。爲了確定一個國家未涉及的URL,我需要上面提到的方法。打算做這樣的:

$rootScope.$watch(function() { return $location.path(); }, function(newUrl, oldUrl) { 
    if(newUrl !== oldUrl) { 
     if (!$state.get(newUrl)) { 
      $window.location.assign(newValue); 
     } 
    } 
} 

已經檢查了docu但目前還沒有這樣的方法。

任何想法?

+0

該URL超出了Angularjs項目的範圍嗎?你能提供一個例子嗎? –

+0

是的,一些URL由後端處理(Play框架)。上面添加了一些細節。 – cnmuc

+0

有一個'routes'文件可以控制誰獲得什麼路線。你可以在你的URL的根目錄下設置angularjs'/'並將所有的API調用重定向到'/ api'。 Angularjs永遠不用擔心。用戶不應該被授予API網址 –

回答

1

這是全部或沒有。如果您打算使用ui-router,請確保您的所有URL都解析爲狀態。如果狀態不存在,則將進入otherwise狀態。可以有可選的參數。

另一種方法是使用.htaccess重定向來捕獲URL並在您點擊ui路由器之前將其重定向。

提供更多細節,我們可以看到最好的選擇是什麼。

+0

感謝您的快速回復!想想否則可以做的伎倆,我會試一試,讓你知道。 – cnmuc

1

嘗試使用這將獲得當前狀態名稱。

var stateName = $state.current.name; 
相關問題