$ stateChangeSuccess未在href-transitioning上触发

时间:2013-08-02 08:02:59

标签: angularjs angular-ui-router angularjs-routing

我的结论是肯定的,除非我使用$ state.transitionTo,否则$ stateChangeSuccess不会触发?例如:

//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版本的情况。有没有办法让两种类型的过渡同等地被解雇?

5 个答案:

答案 0 :(得分:1)

它让我觉得你正在使用嵌套状态。不应该是一个名为&#34; detail&#34;的州的单独网址。 意思是完整的网址是网址:     &#39; /细节/ {的itemId} /变焦&#39;,

答案 1 :(得分:1)

尝试:

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

答案 2 :(得分:1)

从ui-router的1.0.0版开始,你需要注入

  

$过渡

服务

并在控制器中使用此方法:

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

答案 3 :(得分:0)

在你的指令中你可以尝试范围。$ apply()

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

答案 4 :(得分:0)

您可以在使用插入符号^之前缩短嵌套网址:

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

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