1

我的结论是否正确,除非我使用 $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 版本而言并非如此。有没有办法为两种类型的转换平等地触发事件?

4

5 回答 5

1

在我看来,您正在使用嵌套状态。不应该是称为“详细信息”的状态的单独网址。意思是完整的 url 是 url: '/detail/{itemId}/zoom',

于 2013-08-02T08:30:26.440 回答
1

尝试 :

$rootScope.$on('$stateChangeSuccess', function () {
    alert('done transitioning!')
});
于 2015-05-05T12:26:19.737 回答
1

从 ui-router 版本 1.0.0 开始,您需要注入

$过渡

服务

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

$transitions.onStart({}, function() {});
$transitions.onSuccess({}, function() {});
于 2017-01-30T15:50:56.147 回答
0

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

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

<a href="#/zoom/{{item.id}}" >ZOOM IT!</a>
于 2014-02-13T10:22:14.137 回答
0

在您的指令中,您可以尝试 scope.$apply()

//in directive
scope.$state.transitionTo('detail.zoom', { itemId: item.id});
scope.$apply();
于 2013-08-02T08:22:35.320 回答