【问题标题】:Angular ui-router redirects back to parent state with nested viewsAngular ui-router 使用嵌套视图重定向回父状态
【发布时间】:2015-11-04 17:26:05
【问题描述】:

我在 Angular 中有一个路由器:

var scenarioManagementModule = angular.module( 'scenarioManagementModule', ['ngResource', 'scenarioModule'])
.config(['$stateProvider', '$urlRouterProvider',
  function( $stateProvider, $urlRouterProvider){
    $stateProvider.state( 'scenario_management', {
        url:         '/scenario_management',
        templateUrl: 'index.html',
        controller:  function( $scope, $state ) {
            $state.transitionTo('scenario_management.scenarios', { reload: true, inherit: false, notify: true });
        }
    });

    $stateProvider.state( 'scenario_management.scenarios', {
        url:         '/scenarios',
        templateUrl: '/scenarios.html',
        controller:  'ScenarioListController',
        resolve:     {
            scenarios_data:  function( $stateParams, Scenario ){
                return Scenario.list();
            }
        }
    });

    $stateProvider.state( 'scenario_management.scenarios.create', {
        url:            '/create',
        templateUrl:    '/scenario.create.html',
        controller:     'ScenarioCreateController',
    });
}]);

我的视图设置正确。所有父模板的 ui 视图都在正确的位置,当我尝试通过在浏览器中粘贴 url 来访问创建页面时,它可以完美运行。

但是,当我以编程方式尝试使用以下代码调用创建状态时,会发生一些奇怪的事情:

$state.transitionTo('scenario_management.scenarios.create', $stateParams, { reload: true, inherit: false, notify: true });

通过console.log,我可以看到创建状态正在根据需要加载,但是当这个状态完成加载时,它的父状态立即再次开始加载。结果,创建状态再次消失。而且根据浏览器的url,我现在又回到了父状态。

我做错了吗?有人可以告诉我发生了什么,我如何确保创建状态保持加载?

【问题讨论】:

  • 我认为你应该使用 state.go。它基于transitionTo。我在您的配置中没有发现任何问题。
  • 来自文档:转换到新状态的低级方法。 $state.go 在内部使用 transitionTo。在大多数情况下建议使用 $state.go。 angular-ui.github.io/ui-router/site/#/api/…
  • 我试过了,但不幸的是这并没有解决问题。
  • 在您的第一个状态中,您拥有controller: function( $scope, $state ) { $state.transitionTo('scenario_management.scenarios', { reload: true, inherit: false, notify: true }); } 这就是原因。尝试删除它。
  • 如果您不想正确加载此状态,可以使用 abstract: true。

标签: angularjs angular-ui-router


【解决方案1】:

如果您不想正确加载此状态,可以使用 abstract: true。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多