【问题标题】:Angular ui router nested state but same controller/view (no page transition)Angular ui 路由器嵌套状态但相同的控制器/视图(无页面转换)
【发布时间】:2014-09-05 01:01:07
【问题描述】:

我有一个场景是我正在创建一个应该可编辑的页面。单击编辑按钮时,属性名称应更改为文本框(或日期选择器等,具体取决于属性的“类型”)。

现在我希望将 url 更新为“/edit”,但我实际上并不需要页面转换。由于控制器和视图将保持不变,但布尔属性 editMode 将设置为 true,因此输入字段将变为可见。

我可以为此在$stateProvider 创建一个嵌套状态吗?这里甚至需要嵌套状态吗?我认为这是因为虽然不需要页面转换 editMode 仍然是一个状态(P.s. 在考虑状态时我喜欢路由!)。

如何使用 ui 路由器实现这一点?

谢谢。

表单的测试小提琴:没有页面转换。只需切换表单字段。

http://jsfiddle.net/s82h6kkp/

【问题讨论】:

    标签: javascript angularjs angular-ui-router


    【解决方案1】:

    你必须这样做:

    $stateProvider
        .state('users', {
            url: '/users',
            controller: 'users',
            templateUrl: 'users/users.html'
        })
        .state('users.edit', {
            url: '/users/edit',
            views: {
                edit: {
                    templateUrl: 'users/edit.html'
                }
            }
        })
    

    别忘了渲染你的编辑视图

    <!-- users/users.html -->
    <div ui-view="edit"></div>
    

    【讨论】:

    • 就是这样,我不需要编辑模式的单独视图!见小提琴。
    • 你无法做到这一点。编辑模式是一种状态。你有一个状态 - 你制定了一条路线。您制作了一条路线 - 您必须加载您的视图(如果它像您的情况一样是一小部分)
    • 无法使用我的设置!好的,谢谢您的帮助。然后手动工作......
    • 事实上,你可以做到,只是在阅读部分和编辑部分周围有一个 ng-if,它会起作用,但不同的页面绝对是要走的路。另一种方法是创建一个指令来定义一个元素,该元素将重新编译以相应地将文本元素更改为输入/日期,但这不是一件容易的事
    猜你喜欢
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 2015-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多