如何在转换期间改变参数值?

时间:2016-12-06 12:59:11

标签: javascript angularjs angular-ui-router

在过渡期间,我希望能够更改参数值。在文档中,我找到了一种访问目标状态参数using params('to') method的方法。在我的代码中它看起来像这个

$transitions.onStart({ from: 'state3', to: 'state1' }, function ($transition$) {
    var params = $transition$.params('to');
    if(someCondition){
        params.success = true;
    }
    $transition$.params['to'] = params;
});

我的state1定义如下所示

$stateProvider
    .state('state1', {
        url: '/',
        params: {
            success: false,
        },
        ...

但是,当我执行转换时,使用上面列出的代码,我的success参数始终具有默认值(false)。

问题是 - 是否可以在转换期间更改参数值?

背景:我有两个按钮,允许从state3过渡到state1。一个我可以从$scope控制,但另一个是$scope之外的面包屑链接。我想我可以使用这个$transitions钩子来检查一些条件并将success设置为适当的值。

我偶然发现了回复suggesting performing whole new $state.go的新参数,但我发现它有点凌乱和黑客。我有一种感觉,它可以更简单,更清洁的方式实现。

1 个答案:

答案 0 :(得分:1)

我没有设法在特定转换期间更改这些值,但当我将onStart更改为onSuccess时,我只能使用新参数进行全新转换

$transitions.onSuccess({ from: 'state3', to: 'state1' }, function ($transition$) {
    var fromParams = $transition$.params('from');
    if (someCondition) {
        return $state.transitionTo('state1');
    }
    return $state.transitionTo('state1', { success: true }, { notify: false });
});

更改为onSuccess会阻止无限转换循环,这是在onStart事件中调用新转换时发生的。