[英]Angular ui router multiple named views for all states
我想知道是否有任何方法可以為所有狀態編寫多個命名視圖,最好的例子是當我希望導航欄和頁腳出現在所有路徑中時。
$stateProvider
.state('home',{
views: {
'home': {
templateUrl: 'home.html',
controller: controller
},
'nav': {
templateUrl: 'nav.html',
controller:controller
},
'footer': {
templateUrl: 'footer.html',
controller: controller
},
}
})
我不想使用ng-include,因為在這種情況下解析主頁狀態之前導航和頁腳顯示。
是的,你可以,它實際上寫在ui-router
的指南中,關於如何管理多個命名視圖 。
首先,您需要在抽象狀態下定義一組特定的命名視圖,包括將所有內容視圖(如home.html
放在無名視圖(空字符串)中的視圖。
您可能已經注意到,下面的演示顯示了一個名為app
的根狀態,它也是一個抽象狀態(這意味着您無法在此狀態下導航)。 它有三個視圖,每個視圖代表一個與index.html
定義的ui-view
對應的名稱。
在無名視圖中,包含具有無名ui-view
的content.html
,該ui-view
將表示app
狀態的所有子狀態。 通過這樣做,如果在app
狀態下添加這些狀態,則可以將nav.html
和footer.html
共享到所有狀態。 這方面的一個例子是app.home
和app.items
狀態。 要了解更多相關信息,請閱讀我上面添加的鏈接。
使用Javascript
$urlRouterProvider.otherwise('/home');
$stateProvider.state('app', {
abstract: true,
views: {
nav: {
templateUrl: 'nav.html',
controller: 'NavController as Nav'
},
'': {
templateUrl: 'content.html',
controller: 'ContentController as Content'
},
footer: {
templateUrl: 'footer.html',
controller: 'FooterController as Footer'
}
}
})
.state('app.items', {
url: '/items',
templateUrl: 'items.html',
controller: 'ItemsController as Items'
})
.state('app.home', {
url: '/home',
templateUrl: 'home.html',
controller: 'HomeController as Home'
});
HTML
的index.html
<ui-view name="nav"></ui-view>
<ui-view></ui-view>
<ui-view name="footer"></ui-view>
content.html
<hr>
<ui-view></ui-view>
<hr>
根據您的其他路由,您可以使用抽象狀態來執行此操作:
Angular UI路由器 - 處於繼承狀態的視圖也可能有助於指向正確的方向。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.