I want to build a site with the following structure header-view, main-view, footer-view . So I defined a root route which contains the header & footer. Children of root
There is a link to working plunker.
The UI-Router
logic how to find a target/anchor for a view is: always try insert child
into parent
. If not possible, then use absolute naming. see:
So what I changed, is, that the parent unnamed view is now containing a target/anchor for a child - unnamed view <ui-view />
:
.state('root', {
abstract: true,
views: {
'@': {
template: '<ui-view />', // NEW line, with a target for a child
controller: 'RootCtrl',
controllerAs: 'rootCtrl'
},
....
Also, because we say, that the default url is
$urlRouterProvider.otherwise('/home');
we have to have such state:
.state('root.home',{
parent:'root',
url:'/home', // this is the otherwise, to have something on a start up
Check it here
Another approach with a plunker here, could be to target the root view in the child:
.state('root.home',{
parent:'root',
url:'/home',
views: {
'@': {
templateUrl:'home.html',
controller: 'HomeController',
controllerAs:'homeCtrl'
}
},
In this case, the parent state does not have to have <ui-view />
- we target root, but we won't be inheriting anything... Why is that? See this link: