6

问题陈述 :

我有一个“添加评论”按钮,我应该只有在登录系统后才能添加评论。

但问题是登录后我无法返回“添加评论”页面,因为我不知道之前的状态或无法获取之前的状态。

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

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

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

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

有人可以清楚地说明一个好的解决方案。使用 rootscope 好用吗?

4

2 回答 2

13

我应该让登录页面成为模式而不是新页面吗?这是一个设计决定。你可以拥有任何适合你的应用程序并且你喜欢的东西。

使用 rootscope 好用吗?我觉得它是一个很好的解决方案。这是我的做法:

手动保存以前的状态:

创建一个状态变化监听器:

    $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)在用户登录后使用返回评论页面。

-或者 -

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

于 2015-03-16T09:46:17.017 回答
3

对于 ui-router v1.0.0+,状态更改事件已被弃用

Arjun 的状态变化监听器的更新版本将是

$transitions.onStart({}, function (transition) {
    $rootScope.previousState = transition.from();
});
于 2017-09-14T16:10:27.037 回答