javascript - 如何使用 angularjs 和 ui-router 正确显示页眉/页脚?

标签 javascript html css angularjs angular-ui-router

这是我的 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 时,我在浏览器的控制台上得到一个空白屏幕,也没有任何错误。

我正在尝试从网上摘取一些示例(例如 this 一个),但没有一个有效,所以我不知道我做错了什么。

现在我的 header/footer.html 只是说 header/footer.html 而主页上有一个按钮。


添加了完整的 app.js 以防有帮助。每个 html(页脚/页眉/主页)只有

<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>

应用程序.js

.state('root.home', {
            url: '/',
            views: {
                '@': {
                    templateUrl: 'views/home.html',
                    controller: 'HomeCtrl'
                }
            },
            data: {
                requiresLogin: true
            }
        })

最佳答案

我相信您的问题是您的路线正在寻找名为容器而不是类的 View 。

<div ui-view="container"></div>

由于找不到名为的 View ,因此不会在 View 中插入任何内容。

或者您可以将您的 View 路线更改为:

views: {
            '@': {
                templateUrl: 'home/home.html'
            } 

这将告诉它在它找到的第一个未命名 View 中插入该 HTML。

您可以找到如何分割 nested views work with UI-Router here

假设您的 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
            }

关于javascript - 如何使用 angularjs 和 ui-router 正确显示页眉/页脚?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36242581/

相关文章:

html - 柔性 : Scrollable div inside flex-column

javascript - 从 iframe 中抓取特定数据

php - Datepicker 上的 JSON 和突出显示

javascript - AngularJS - 表单自定义验证 - 检查是否至少有一个输入为空

css - Z-Index 不适用于我的 Magento 主题

html - 换行符(在代码中)导致 HTML 输出中不需要的边距

javascript - Asp.Net4 Javascript/jquery 缩小错误

javascript - auth' 未从 React 应用程序中的 'firebase' 导出

html - 如何将溢出设置为隐藏以保护元素正确超出页脚?

javascript - addEventListener 无法正常工作