在AngularJS和ui-router中遇到嵌套状态的问题

Rom*_*dik 4 html javascript angularjs angular-ui-router

有嵌套状态的麻烦......

我有一个有几页的应用程序(表示为页面模板).所以,我真的需要使用嵌套状态.阅读文档和示例是无用的......

所以代码在这里.

这是我的状态配置:

myApplication.config(function ($stateProvider, $urlRouterProvider, $httpProvider) {
    $urlRouterProvider.otherwise('/');

    $stateProvider
        .state('state1', {
            url: '/state1',
            views: {
                'content': {
                    templateUrl: /* path to template */
                },
                'menu': {
                    templateUrl: /* path to template */
                },
                'overlay': {
                    templateUrl: /* path to template */
                }
            }
        })
        .state('layer', {
            url: '/layer',
            views: {
                'content': {
                    templateUrl: /* path to template */
                },
                'menu': {
                    templateUrl: /* path to template */
                }
            }       
        })
        .state('layer.message', {
            url: '/message',
            views: {
                'overlay': {
                    templateUrl: /* path to template */
                }
            }
        });
});
Run Code Online (Sandbox Code Playgroud)

这是我的HTML视图:

<html>
    <body ng-app="myApplication" ng-controller="AppCtrl">
        <div id="wrapper">
            <!-- Here is some not interesting stuff -->
        </div>

        <!-- But here is the most exciting things -->
        <div id = "overlay" ui-view="overlay"></div>
    </body>
</html>
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我在这个子状态中有一个状态'layer'和一个子状态'layer.message'我只想加载一个被调用的额外模板并将其overlay包装在一个div标记中,比如'state1'.但我所有的尝试都失败了.firebug调试工具向我显示模板是通过GET查询加载的.但它不会出现在HTML模型中,因此不会呈现.在'state1'中,一切都很好.我相信我对禁奶状态做错了...有什么建议吗?

mjt*_*tko 14

您的嵌套layer.message状态需要使用"@"后缀明确地处理更高状态的视图,即:

.state('layer.message', {
        url: '/message',
        views: {
            'overlay@': {
                templateUrl: /* path to template */
            }
        }
    })
Run Code Online (Sandbox Code Playgroud)

这表示'使用模板填充未命名(根)状态中名为"overlay"的视图.您也可以更明确并指定overlay@layer.

有关详细信息,请参阅https://github.com/angular-ui/ui-router/wiki/Multiple-Named-Views#view-names---relative-vs-absolute-names.