2015-10-08 81 views
1

我很驚訝地發現ui-router在模塊間共享狀態。

沒關係,但對於我們的開發環境,我想清除所有應用程序狀態並從頭開始。

避免在第一種情況下爲我們的測試環境定義它們是不方便的,因爲狀態定義與所有其他應用程序加載混合在一起,並且我們希望確定應用程序依賴性是描述在所有環境中都是一樣的。

因此,我可以清除或逐個刪除已定義的狀態嗎?

.config(function($stateProvider) { 
    // TODO: get rid of $state definitions from the app, we don't want them here 
} 
+1

實測值這一點。 「在路線圖」:https://github.com/angular-ui/ui-router/issues/1095 – SimplGy

+0

我認爲你可以覆蓋狀態。所以你可以用一個永遠不會匹配的URL替換狀態。 – cgTag

+0

@ThinkingMedia問題是沒有一個好方法將它從'$ urlRouterProvider'中移除。如果有的話,我認爲這已經是一個功能,因爲它已被多次請求。 –

回答

1

這是不可能的。 ui-router使用ng-routerng-router直到編譯提供程序之後才公開路由。這意味着在配置應用程序之前,您將無法刪除狀態/路線。我不認爲他們會接受公關。

編輯:

針對提出的意見。 $routerProvider使用的路線對象可用,您可以刪除路線。

https://github.com/angular/angular.js/blob/master/src/ngRoute/route.js#L451

delete $route.routes['/'];

但狀態對象由$stateProvider使用不可用。

https://github.com/angular-ui/ui-router/blob/a7d25c6/src/state.js

所以ui-router將需要進行修改,以能配置後刪除狀態。 OR ng-router將需要修改,以便能夠在配置期間刪除路由。

+0

*應用程序配置後,我可以刪除它們嗎? – SimplGy

+0

你可以刪除路由,但沒有ui-router的修改版本,你不能訪問states對象來刪除它。這需要提供給'$ state'注射器。 –

+0

是的......這是從$ state.get()我想擺脫的狀態。哦,很高興知道它需要一把叉子才能完成。謝謝Micah! – SimplGy

2

從012.開始版本1.0.0(目前在rc1版本)現在可以正確刪除狀態。

注入$stateRegistry(運行時)或$stateRegistryProvider(config)並調用deregister()方法。

這裏詳細API,與實施this提交