Javascript AngularJs:UI路由器浏览器刷新,移动到第一个子状态?

Javascript AngularJs:UI路由器浏览器刷新,移动到第一个子状态?,javascript,angularjs,angular-ui-router,Javascript,Angularjs,Angular Ui Router,我使用的是AngularUI路由器,而不是HTML5模式。下面是路由器配置。我正在为订单处理应用程序的每个步骤使用嵌套视图。 订购过程的每一步都依赖于前一步 我的问题是,在订购过程的第2步或第3步,浏览器刷新;所有输入数据都丢失,因此我希望用户重定向到订购过程的初始步骤1 $stateProvider .state('wizard', { url: "/wizard", templateUrl: 'template/newOrd

我使用的是AngularUI路由器,而不是HTML5模式。下面是路由器配置。我正在为订单处理应用程序的每个步骤使用嵌套视图。 订购过程的每一步都依赖于前一步 我的问题是,在订购过程的第2步或第3步,浏览器刷新;所有输入数据都丢失,因此我希望用户重定向到订购过程的初始步骤1

  $stateProvider
        .state('wizard', {
            url: "/wizard",
            templateUrl: 'template/newOrder.cshtml',
            controller: 'createOrderController',
            controllerAs: 'vm',
            data: { pageTitle: 'Wizard form' }
        })
        .state('wizard.step_one', {
            url: '/step_one',
            templateUrl: 'template/step1.cshtml',
            controller: 'orderStep1Controller',
            controllerAs:'vm',
            data: { pageTitle: 'Wizard form' }
        })
        .state('wizard.step_two', {
            url: '/step_two',
            templateUrl: 'template/step2.cshtml',
            controller: 'orderStep2Controller',
            controllerAs: 'vm',
            data: { pageTitle: 'Wizard form' }
        })
        .state('wizard.step_three', {
            url: '/step_three',
            templateUrl: 'template/step3.cshtml',
            controller: 'orderStep3Controller',
            controllerAs: 'vm',
            data: { pageTitle: 'Wizard form' }
        })
    .state('wizard.step_four', {
        url: '/step_four',
        templateUrl: 'template/step4.cshtml',
        controller: 'orderStep4Controller',
        controllerAs: 'vm',
        data: { pageTitle: 'Wizard form' }
    })
    ;

关于,

我假设
/wizard
状态实际上除了保存嵌套视图之外没有做任何事情

您可能需要更改一些内容,使其成为一个抽象视图,以保存所有状态,包括将
neworder.cshtml
更改为自己的状态:

.state('wizard', {
        url: "/wizard",
        abstract: true,
        templateUrl: 'template/newOrder.cshtml',
        controller: 'createOrderController',
        controllerAs: 'vm',
        data: { pageTitle: 'Wizard form' }
    })
可以找到更深入的信息以及如何使用抽象

它包括关于如何执行URLROUTERREDIRECT的gret信息,在本例中可能会用到这些信息,具体取决于您希望何时执行。您可以说何时登录向导视图以重定向到neworder(例如,下面的示例)

$urlRouterProvider.when('/wizard','/wozard/neworder')

如果您想在特定事件后捕获它,也可以使用
。否则

$urlRouterProvider.otherwise('/otherwise')

必须像往常一样在一个状态上定义/否则url:

$stateProvider .state(“否则”{url:'/others'…})


创建一个服务,在控制器加载时检查输入数据,如果验证失败,则将其发送到步骤1。或者使用本地存储/cookies存储其数据感谢您的评论;我试着将向导状态抽象化,并根据您的建议进行更改,但对我无效。。。我觉得在手动刷新浏览器或通过F5刷新浏览器时,移动到默认状态将是UI路由器中烘焙的东西。。将探索更多。。您是否愿意使用ui router 1.0 alpha版本?它有过渡钩子,您可以使用它来实现这一点。如果是这样,让我知道我会写一个答案。