Angularjs 在角度SPA中重定向的良好实践是什么

Angularjs 在角度SPA中重定向的良好实践是什么,angularjs,redirect,Angularjs,Redirect,我正在构建一个angular应用程序,遇到了几个我想将用户重定向到某个页面的实例。但是,关于是否应该重定向用户的信息通常在服务器端请求之后接收 在执行服务器请求所需的时间内,原始页面开始呈现,因此创建了错误的UX 一个例子是当用户未经授权时重定向到登录页面 问题1我知道如何单独处理这些案件。但是我想知道是否有一些标准模式可以用来解决这个问题 问题2从服务器获取信息时,是否有标准模式来控制何时开始呈现页面。例如 我的看法是 {{user.name}} 控制器具有以下代码: userServic

我正在构建一个angular应用程序,遇到了几个我想将用户重定向到某个页面的实例。但是,关于是否应该重定向用户的信息通常在服务器端请求之后接收

在执行服务器请求所需的时间内,原始页面开始呈现,因此创建了错误的UX

一个例子是当用户未经授权时重定向到登录页面

问题1我知道如何单独处理这些案件。但是我想知道是否有一些标准模式可以用来解决这个问题

问题2从服务器获取信息时,是否有标准模式来控制何时开始呈现页面。例如 我的看法是

{{user.name}} 
控制器具有以下代码:

userService.load_user().then(function(user) {
    $scope.user = user;
});
我不希望在用户加载之前显示任何内容,可能只是一个加载标志。目前我可以这样做:

//controller
userService.load_user().then(function(user) {
    $scope.user = user;
    $scope.loaded = true;
});


这里是真正的代码。

当我想等待多个请求时,这会变得复杂。

使用路由的resolve属性。我假设您使用的是ngRoutes或ui路由器。两者都包括其路由上的resolve属性

若要在等待解决时添加微调器或类似对象,请在shell视图控制器中侦听视图更改事件(假设有),并相应地添加/删除微调器

我所说的shell控制器只是指嵌套其他控件的最高级别视图。它可能有也可能没有控制器,但通常有。该作用域上可能有一个
showSpinner
属性:

myApp.controller('mainCtrl', function($scope){
   $scope.showSpinner = false;

    $scope.$on('$stateChangeStart', function(){
        $scope.showSpinner = true;
    });
    $scope.$on('$stateChangeSuccess', function(){
        $scope.showSpinner = false;
    });
});
然后您可以只使用
ngshow='showSpinner'
ngshow='!分别在微调器html元素和视图元素上显示微调器“

这是基本思想。你可能会得到一些更详细的东西


。这里发生的事情(抽象状态等)比您要求的要多一些,但是您将很快看到resolve属性是如何使用的以及状态是如何转移的。

我是如何错过resolve的。谢谢,这帮了大忙。不确定您所说的“shell视图控制器”是什么意思。你能详细说明一下吗?(在接受答案之前等待)
myApp.controller('mainCtrl', function($scope){
   $scope.showSpinner = false;

    $scope.$on('$stateChangeStart', function(){
        $scope.showSpinner = true;
    });
    $scope.$on('$stateChangeSuccess', function(){
        $scope.showSpinner = false;
    });
});