2016-11-11 85 views
2

我想从头开始构建一个非常简单的使用ui路由器的角度应用程序。
每一页都将具有相同的外观,并且将具有以下4个部分(垂直,从上到下):多个命名的视图不显示

  • 报头(通用于所有页面)
  • 水平菜单(通用于所有页面)
  • 内容(这是会改变的唯一内容)
  • 尾(通用于所有页面)

index.html有在<body>标签内的。

我也有一个简单的HTML 文件portal.html),其中包含每个页面的结构:

<div ui-view="header"></div> 
<div ui-view="menu"></div> 
<div ui-view="content"></div> 
<div ui-view="footer"></div> 

我已经创建了一个父状态,在这里我设置为每个页面的共同部分:

$stateProvider 
    .state('portal', { 
    url: '/portal', 
    templateUrl: 'app/main/portal.html', 
    views: { 
     header: { 
     templateUrl: 'app/main/section/header.html' 
     }, 
     menu: { 
     templateUrl: 'app/main/section/menu.html' 
     }, 
     footer: { 
     templateUrl: 'app/main/section/footer.html' 
     } 
    } 
    }); 

而有些孩子的状态(每一个菜单选项 - 网页),在这里我设置变量内容的每一页:

$stateProvider 
    .state('portal.home', { 
    url: '/home', 
    views: { 
     '[email protected]': { 
     controller: 'HomeCtrl as homeVM', 
     templateUrl: 'app/portal/home.html' 
     } 
    }, 
    resolve: { /* whatever */ } 
    }) 

    // ... and so on ... 

    .state('portal.contactUs', { 
    url: '/contact-us', 
    views: { 
     '[email protected]': { 
     controller: 'ContactUsCtrl as contactUsVM', 
     templateUrl: 'app/portal/contactUs.html' 
     } 
    }, 
    resolve: { /* whatever */ } 
    }); 

但是这不会在屏幕上显示任何东西...我在这里错过了什么吗?

+0

我一直在研究一点点,尝试不同的东西,最近想通了,什么可能导致麻烦的是在传递到状态配置对象的'views'财产'$ stateProvider.state()'。 我想这样做,以避免在每个孩子状态下设置那些常见的'N'次... – charliebrownie

回答

0

我终于找到了解决方案。实际上帮助我的是this StackOverflow post,这与我的非常相似,特别是在那里显示的plunker example

错误发生在状态配置对象传递给$stateProvider.state()。父状态应设置方式如下:

$stateProvider 
    .state('portal', { 
    url: '/portal', 
    views: { 
     '@': { 
     templateUrl: 'app/main/portal.html' 
     }, 
     '[email protected]': { 
     templateUrl: 'app/main/public/header.html' 
     }, 
     '[email protected]': { 
     templateUrl: 'app/main/public/menu.html' 
     }, 
     '[email protected]': { 
     templateUrl: 'app/main/public/footer.html' 
     } 
    } 
    });