如何使用ui-router获取带Params的Previous State

时间:2015-03-16 03:10:50

标签: angularjs angularjs-scope angular-ui-router angular-ui-router-extras

问题陈述:

我有一个按钮"添加评论" ,我应该只在登录系统时添加评论。

但问题是我无法回到"添加评论"登录后的页面,因为我不知道以前的状态或无法获得以前的状态。

有没有更清洁的解决方案呢?我应该有登录页面模式而不是新页面吗?

我已经看到了关于以前状态的所有问题以及可能的答案(是的,我正在考虑$ roots roots和$ stateChangeSuccess)。但它没有明确提出解决方案。

其他可能的解决方案如下 http://christopherthielen.github.io/ui-router-extras/example/previous/index.html#

我也看到了 https://github.com/angular-ui/ui-router/issues/92。但同样,我不确定什么是正确的答案。

有人可以明确说明一个好的解决方案。使用rootcope是一个好的吗?

2 个答案:

答案 0 :(得分:13)

我的登录页面是否应该是模式而不是新页面?这是一个设计决策。你可以根据自己的喜好选择任何适合你的应用程序。

是否使用了一个很好的rootcope?我觉得它是一个很好的解决方案。以下是我将如何做到这一点:

手动保存以前的状态:

创建状态更改侦听器:

    $rootScope.$on('$stateChangeSuccess', function(event, to, toParams, from, fromParams) {
        //save the previous state in a rootScope variable so that it's accessible from everywhere
        $rootScope.previousState = from;
    });
  }]);

不是使用ui-sref,而是为评论按钮添加一个单击功能。

$scope.commentHandler = function(){
    //check if user is logged in, let the user post the comment

    //else take him to login page
}

然后,您可以在用户登录后使用$state.go($rootScope.previousState.name)返回评论页面。

-OR -

您可以提供一个小型登录框来代替"发表评论"如果用户未登录,则按钮。

答案 1 :(得分:1)

对于ui-router v1.0.0 +,状态更改事件为deprecated

Arjun's状态更改侦听器的更新版本将是

NGRX