编程语言
首页 > 编程语言> > javascript-角度ui路由和嵌套子状态下的多个视图

javascript-角度ui路由和嵌套子状态下的多个视图

作者:互联网

我有一个抽象的父状态,它基本上只包含具有ui视图的html模板.我有多个包含多个视图的子状态,每个子状态都有一个也包含多个视图的子状态.该行中的第一个子状态工作正常,但是当我尝试将子状态访问到子状态时,它崩溃了.

这是一些简化的代码(我在真实代码的页面上有几个组件.它的作用类似于todo.它基本上有一个列表和一个编辑视图(我不想对该列表进行行/行编辑)和视图将显示/隐藏,具体取决于您编辑单个项目或创建新项目的状态.我希望其他组件的其余列表仍然显示):

index.html:

<div ui-view></div>
<div ui-view="todo-edit"></div>
<div ui-view="todo-list"></div>

js代码:

$stateProvider
    .state('root', {
        abstract: true,
        url: '/',
        templateUrl: '/index.html'
    })
    .state('root.todo', { //This state works
        url: '/todo',
        views: {
            '': {
                template: 'Todo list'
            },
            'todo-list': {
                templateUrl: '/todo-list.html',
                controller: 'TodoListController'
            }
        }
    })
    .state('root.todo.edit', { //This state does not work
        url: '/edit/:id',
        views: {
            '@root': {
                template: 'Edit todo'
            },
            'todo-list@root': {
                templateUrl: '/todo-list.html',
                controller: 'TodoListController'
            },
            'todo-edit@root': {
                templateUrl: '/todo-edit.html',
                controller: 'TodoEditController'
            }
        }
    })
    .state('root.todo.create', { //This state does not work
        url: '/create',
        views: {
            '@root': {
                template: 'Create todo'
            },
            'todo-list@root': {
                templateUrl: '/todo-list.html',
                controller: 'TodoListController'
            },
            'todo-edit@root': {
                templateUrl: '/todo-edit.html',
                controller: 'TodoEditController'
            }
        }
    });

状态todo.list.edit不起作用,它将仅使我返回到根页面而没有任何错误.任何人都知道问题可能是什么以及如何解决?任何建议,将不胜感激.也许我的观点走错了路,还有另一种解决方法?

我想使用状态而不是ng-include和在服务或类似物之间共享状态来解决不同的“状态”.

解决方法:

您正在定义todo.list的2个子状态:

.state(‘todo.list.edit’)和.state(‘todo.list.create’)

但我看不到您在哪里定义了一个名为todo.list的状态.为此,请定义todo.list状态或使2个创建和编辑状态成为todo的子级:

.state(‘todo.edit’)和.state(‘todo.create’)

也,

待办事项清单

无效,因为您的待办事项状态实际上称为root.todo,因此即使您具有todo.list状态,也必须将其称为root.todo.list.

标签:angularjs,angular-ui-router,angular-ui,angularjs-routing,javascript
来源: https://codeday.me/bug/20191029/1957191.html