2013-08-02 32 views
1

我的結論是否正確:$ stateChangeSuccess不會觸發,除非我使用$ state.transitionTo?例如:

//in app config 
.state('detail.zoom', { 
     url: '/zoom/{itemId}', 
     templateUrl: 'detail/zoom-partial.html' 
    }) 

//in html 
<a href="#/zoom/{{item.id}}" >ZOOM IT!</a> 

//in directive 
scope.$state.transitionTo('detail.zoom', { itemId: item.id}); 

//in some controller 
$scope.$on('$stateChangeSuccess', function() {alert('done transitioning!')}); 

來自transitionTo的事件觸發了$ stateChangeSuccess,但這不是href版本的情況。有沒有辦法讓這兩種類型的轉型的事件平均發生?

+0

可能是你正在尋找$ routeChangeSuccess – AlwaysALearner

+0

@Codezilla,我可以測試這一點,但我懷疑這一點,因爲這是引用angular-ui/ui-router,這是angularjs的獨立庫,而不是默認的routeProvider。看到這裏[鏈接](https://github.com/angular-ui/ui-router/wiki) – dularion

+0

哦,我現在知道我的錯誤是什麼。我有一個嵌套的狀態,但沒有在href中使用完整的url路徑。 – dularion

回答

1

它看起來像你對我使用的是嵌套的狀態。不應該成爲稱爲「細節」的狀態的單獨網址。 意義的完整網址是網址: '/細節/ {的itemId} /縮放',

+0

是的,這正是我錯過的!非常感謝你:) 當聲明狀態只使用部分url時有點令人困惑,但在html中當然必須使用完整路徑 – dularion

0

在你的指令,你可以嘗試範圍。$適用()

//in directive 
scope.$state.transitionTo('detail.zoom', { itemId: item.id}); 
scope.$apply(); 
+0

的範圍。$ state.transitionTo沒有問題,所以不需要$ apply()。它是不觸發事件的href。謝謝,雖然 – dularion

0

可以縮短嵌套的URL與使用插入符號^前:

.state('detail.zoom', { 
    url: '^/zoom/{itemId}', 
    templateUrl: 'detail/zoom-partial.html' 
}) 

<a href="#/zoom/{{item.id}}" >ZOOM IT!</a> 
1

嘗試:

$rootScope.$on('$stateChangeSuccess', function() { 
    alert('done transitioning!') 
}); 
+0

雖然這可能是一個正確的答案,但如果它是一個很好的改進你添加了一個解釋爲什麼你的代碼工作/它做了什麼。 – 11684

1

從UI路由器的版本1.0.0,你需要注入

$過渡

服務

,並使用此方法內部控制器:

$transitions.onStart({}, function() {}); 
$transitions.onSuccess({}, function() {});