Angular ui-router:容器视图和默认视图

时间:2015-09-24 21:55:11

标签: javascript angularjs state angular-ui-router

我正在努力为下一个状态创建容器,将状态定义为视图,分为标题,容器,页脚。

作为一个例子的下一个州将是博客,但我没有看到将其纳入视图的方法。

一个想法是将HOME视图作为标准启动,但也失败了。

视图:

<main>

    <header ui-view="header"></header>
    <content ui-view="home"></content>
    <footer ui-view="footer"></footer>

</main>

规定:

.state('home',{
        url:'/',
        data: {
            pageTitle: 'Home'
        },
        views: {
            '': {
                templateUrl: 'content/index.html',
            },
            'header@home': {
                templateUrl: 'content/templates/header.html',
                controller: 'HeaderController',
                cache: false
            },
            'home@home': {
                templateUrl: 'content/templates/home.html',
                controller: 'IndexController',
                cache: false
            },
            'footer@home': {
                templateUrl: 'content/templates/footer.html',
                //controller: 'FooterController',
                cache: false
            }
        }
    })

.state('home.blog',{
        url         : '/blog',
        templateUrl : 'content/templates/blog.html',
        controller  : 'BlogController',
        data: { pageTitle: 'Blog' },
        access: {requiredLogin: false}
    })

SUCCESS! :)

Plunker示例:http://plnkr.co/edit/yRgqiAeEVQl2WVajGgG0?p=preview

1 个答案:

答案 0 :(得分:1)

在上面更新的问题中,您已经使用了this plunker to show如何使其发挥作用:

.state('home',{
    url:'',
    abstract: true,
    views: {
        '': {
            templateUrl: 'index.html'    // this
        },
        'header@home': {
            templateUrl: 'header.html'

        },
        'footer@home': {
            templateUrl: 'footer.html'
        }
    }
})
.state('home.index',{
    url         : '/',
    templateUrl : 'home.html'
})
.state('home.blog',{
    url         : '/blog',
    templateUrl : 'blog.html',
});

虽然该解决方案正在发挥作用,但实际上是您/我们应该采用的方式。因为父状态&#39; home&#39;,会注入未命名的视图 itslef - templateUrl: 'index.html'

所以,现在又有了标题页脚的观点,但它们确实与根(原始index.htm不同。他们的绝对名字是“@ home&#39;和&#39; footer @ home&#39; (在代码片段中使用) - 似乎一切正常。

但这是多余的。除非我们将布局转移到某些布局中。州和&#39; layout.html&#39;

为何多余?由于index.html已经在播放(作为 root ,因此它包含这些目标。他们的绝对名字是&#39;标题@&#39;和&#39;页脚@&#39;。这应该是要走的路。

为清楚起见,有an updated plunker及其摘要:

.state('home',{
    url:'',
    abstract: true,
    views: { 
        '': {
            template: '<div ui-view=""></div>'
        },
        'header': {
            templateUrl: 'header.html'

        },
        'footer': {
            templateUrl: 'footer.html'
        }
    }
})
.state('home.index',{
    url         : '/',
    templateUrl : 'home.html'
})
.state('home.blog',{
    url         : '/blog',
    templateUrl : 'blog.html',
});

检查更新here