Это мой index.html:
<body>
<div ui-view></div>
</body>
Это мой app.js:
angular.module('sample', [
'auth0',
'ngRoute',
'sample.home',
'sample.header',
'sample.login',
'ui.router',
'angular-storage',
'angular-jwt'
])
.config(function myAppConfig($stateProvider, $urlRouterProvider, $routeProvider, authProvider, $httpProvider, $locationProvider,
jwtInterceptorProvider) {
$stateProvider
.state('login', {
url: '/login',
templateUrl: 'login/login.html',
controller: 'LoginCtrl'
}).state('root', {
url: '/',
abstract: true,
views: {
'header': {
templateUrl: 'home/header.html',
controller: 'HeaderCtrl'
},
'footer': {
templateUrl: 'home/footer.html'
}
},
data: {
requiresLogin: true
}
}).state('root.home', {
url: '/',
views: {
'@': {
templateUrl: 'home/home.html'
}
},
data: {
requiresLogin: true
}
})
$urlRouterProvider.otherwise('/');
authProvider.init({
domain: AUTH0_DOMAIN,
clientID: AUTH0_CLIENT_ID,
loginUrl: '/login'
});
jwtInterceptorProvider.tokenGetter = function(store) {
return store.get('token');
}
$httpProvider.interceptors.push('jwtInterceptor');
})
.run(function($rootScope, auth, store, jwtHelper, $location, $state, $stateParams) {
$rootScope.$on('$locationChangeStart', function() {
if (!auth.isAuthenticated) {
var token = store.get('token');
if (token) {
if (!jwtHelper.isTokenExpired(token)) {
auth.authenticate(store.get('profile'), token);
} else {
$location.path('/login');
}
}
}
});
})
.controller('AppCtrl', function AppCtrl($scope, $location) {
$scope.$on('$routeChangeSuccess', function(e, nextRoute) {
if (nextRoute.$$route && angular.isDefined(nextRoute.$$route.pageTitle)) {
$scope.pageTitle = nextRoute.$$route.pageTitle + ' | Auth0 Sample';
}
});
})
Если я вхожу в систему и корнем, который прокомментировал, все работает нормально. Но мне нужно добавить верхний и нижний колонтитулы (файлы верны), и когда я пробую root + root.home, я получаю пустой экран без ошибок в консоли браузера.
Я пытаюсь отключить несколько примеров из онлайн (например, этот), но никто из них не работает, поэтому я не знаю, что я делаю неправильно.
Прямо сейчас мой заголовок /footer.html просто скажу header/footer.html, в то время как у дома есть кнопка на нем.
Добавлен полный app.js в случае, если это поможет. Каждый html (footer/header/home) просто имеет
<h1>Home</h1>
<div ui-view></div>
Изменение: index.html
<body>
<div ui-view="header"></div>
<div ui-view></div>
<div ui-view="footer"></div>
</body>
app.js
.state('root.home', {
url: '/',
views: {
'@': {
templateUrl: 'views/home.html',
controller: 'HomeCtrl'
}
},
data: {
requiresLogin: true
}
})
Я считаю, что ваша проблема здесь заключается в том, что ваш маршрут ищет представление с именем container, а не классом.
<div ui-view="container"></div>
Поскольку он не может найти имя с именем, которое не вставляет ничего в представление.
Или вы можете просто изменить свой маршрут просмотра:
views: {
'@': {
templateUrl: 'home/home.html'
}
Что скажет ему вставить этот HTML-код в первый неназванный вид, который он находит.
Вы можете найти разбивку того, как вложенные представления работают с UI-Router здесь
Предполагая, что ваш home.html выглядит так:
<div ui-view="header"></div>
<div ui-view="footer"></div>
ваш маршрут должен быть чем-то вроде
views: {
'header@home': {
templateUrl: 'home/header.html',
controller: 'HeaderCtrl'
},
'footer@home': {
templateUrl: 'home/footer.html'
}
},
data: {
requiresLogin: true
}