2015-10-29 25 views
0

我正在使用Angular與ui-router。我試圖重構一些代碼,看起來像這樣:

window.location.hash = "order/" + vm.selectedRow.ID; 

這樣:

$state.go("^.order", {orderId: vm.selectedRow.ID}) 

更改爲使用$ state.go手柄導航到該路由就好了,但是,到達那裏之前網址已更新。在關聯控制器的構造函數中,我從當前url的末尾獲取orderId並在查詢中使用它。我正在使用此代碼:

var strings = window.location.href.split('/'); 
return strings[strings.length - 1]; 

獲得密鑰。

我應該: 1,繼續設置,而不是使用$ state.go, 2.重構使用$位置,因爲它讓我得到掛起的URL window.location.hash, 3.通行證的ID價值到新的路線使用的控制器?

+1

4.使用$ stateParams服務獲取orderId。 –

回答

2

如果您使用ui-router,則不需要並行使用window.locationui-router提供了一個名爲$stateParams的服務,您可以將其注入控制器。該服務提供了一個對象,每個url參數都有一個鍵。在你的情況,例如在$stateParams對象將是這樣的:

{ orderId: 2 } 

但是,請記住,在控制器的$stateParams對象將只包含已與該國註冊PARAMS。所以你不會看到其他州註冊的參數。

另一種方法是使用$state.params。您只需將$state注入您的控制器。這裏的優點是,你也可以訪問查詢參數。這裏是一個小例子:

$stateProvider.state('product', { 
    url: 'product/:id/:anotherParam/?queryParam', 
    controller: 'MyProductController', 
}); 

$state.params; // Contains id, anotherParam, and also queryParam 
$stateParams; // Only contains id and anotherParam 
+0

謝謝,因爲我已經注入狀態,所以我只是去了$ state.params.orderId –

+0

是的,工作得很好。不客氣。 – LordTribual