定义嵌套视图

时间:2018-06-03 15:13:39

标签: angularjs angular-ui-router

我有一个AngularJS的网站,index.html

<body>
    <ui-view ng-cloak></ui-view>
</body>

angularApp.js

app.config(['$stateProvider', function ($stateProvider) {
    $stateProvider
        .state('home', {
            url: '/home',
            templateUrl: '/htmls/home.html',
            controller: 'MainCtrl'
        }
        .state('help', {
            url: '/help',
            templateUrl: '/htmls/help.html',
            controller: 'HelpCtrl'
        }   
}])

home.htmlhelp.html(以及其他页面)中,我总是在页面顶部有一个相同的导航栏。所以我想避免重复代码并创建/htmls/header.html和控制器NavCtrl。因此,我将能够在这些htmls中编写<div ui-view="header"></div>

是否有人知道如何修改我的angularApp.jsindex.html以让他们接受嵌套的header视图?

2 个答案:

答案 0 :(得分:0)

将配置块中的代码更新为:

$stateProvider      
  .state('home',{       
    views: {        
      'header': {       
        templateUrl: '/htmls/header.html',      
        controller: 'NavCtrl'
      },        
      'content': {      
        templateUrl: '/htmls/home.html',        
        controller: 'MainCtrl'
      }     
    }       
  })
  .state('help',{       
    views: {        
      'header': {       
        templateUrl: '/htmls/header.html',      
        controller: 'NavCtrl'
      },
      'content': {      
        templateUrl: '/htmls/help.html',        
        controller: 'HelpCtrl'  
      }     
    }       
  })

在index.html中使用如下所示,现在home.html,help.html只能包含没有标题html的内容

<body>
    <div ui-view="header"></div>
    <div ui-view="content"></div>
</body>

关注Official docs

答案 1 :(得分:0)

不使用ui-view,而是使用组件:

̶<̶d̶i̶v̶ ̶u̶i̶-̶v̶i̶e̶w̶=̶"̶h̶e̶a̶d̶e̶r̶"̶>̶<̶/̶d̶i̶v̶>̶
<my-header></my-header>

JS

app.component("myHeader", {
    templateUrl: '/htmls/header.html',      
    controller: 'NavCtrl'
});