【问题标题】:Angular ui-router Nested states open from urlAngular ui-router 嵌套状态从 url 打开
【发布时间】:2015-08-14 18:02:29
【问题描述】:

我正在尝试使用ui-router 来管理单页应用程序上的嵌套视图。

假设我想创建一个具有公共区域和多个视图的仪表板应用程序。

主状态和嵌套状态是这样处理的:

    $stateProvider.state('home', {
        url: '/',
        template: 'MY HOME PAGE'
    })
    .state('login', {
        url: '/login',
        templateUrl: '/pages/login.html'
    })
    .state('registration', {
        url: '/registration',
        templateUrl: '/pages/registration.html'
    })
    .state('dashboard', {
        url: '/dashboard',
        templateUrl: '/pages/dashboard/dashboard.html' 
    })
    .state('dashboard.me', {
        url: '/me',
        templateUrl: '/pages/dashboard/me.html'
    })
    .state('dashboard.messages', {
        url: '/messages',
        templateUrl: '/pages/dashboard/messages.html'
    })
    .state('dashboard.friends', {
        url: '/friends',
        templateUrl: '/pages/dashboard/friends.html'
    });

仪表板 HTML 页面如下:

<div class="container" ng-controller="dashboardCtrl" ng-init="init()">

<h2>DASHBOARD</h2>
<ul>
    <li><a ui-sref="dashboard.me">Me</a></li>
    <li><a ui-sref="dashboard.messages">My Messages</a></li>
    <li><a ui-sref="dashboard.friends">My Friends</a></li>
</ul>

<div ui-view></div>

上面的 HTML 也包含在 ui-view 中。

如果我使用锚点导航我的应用程序,一切正常。 顺便说一句,如果我尝试直接访问 myhost/dashboard/memyhost/dashboard/friends(每个具有两级嵌套视图的路径)该应用程序不起作用。我得到一个有角度的(意外的令牌

似乎无法解析第一级嵌套视图。 下图显示了使用锚点完成导航时获得的 HTML:

以及直接从浏览器地址链接调用页面时得到的HTML:

有什么想法吗?谢谢。

【问题讨论】:

  • 您的网址中可能缺少#。试试host/#/dashboard/me

标签: javascript html angularjs angular-ui-router


【解决方案1】:

问题是角度未加载,因此出现错误。代码对我来说看起来是正确的,除非你错过了

的结束标签
<div class="container" ng-controller="dashboardCtrl" ng-init="init()">

?

【讨论】:

    【解决方案2】:

    JavaScript 状态配置:

        $stateProvider.state('home', {
            url: '/',
            template: 'MY HOME PAGE'
        })
        .state('login', {
            url: '/login',
            templateUrl: '/pages/login.html'
        })
        .state('registration', {
            url: '/registration',
            templateUrl: '/pages/registration.html'
        })
        .state('dashboard', {
            url: '/dashboard',
            abstract: true,
            parent: 'home',
            templateUrl: '/pages/dashboard/dashboard.html'
        })
        .state('dashboard.me', {
            url: '/me',
            views: {
                '@dashboard_view': {
                    templateUrl: '/pages/dashboard/me.html'
                }
            }
        })
        .state('dashboard.messages', {
            url: '/messages',
            views: {
                '@dashboard_view': {
                    templateUrl: '/pages/dashboard/messages.html'
                }
            }
        })
        .state('dashboard.friends', {
            url: '/friends',
            views: {
                '@dashboard_view': {
                    templateUrl: '/pages/dashboard/friends.html'
                }
            }
        });
    

    仪表板 HTML

    <div class="container" ng-controller="dashboardCtrl" ng-init="init()">
    
    
    <h2>DASHBOARD</h2>
    <ul>
        <li><a ui-sref="dashboard.me">Me</a></li>
        <li><a ui-sref="dashboard.messages">My Messages</a></li>
        <li><a ui-sref="dashboard.friends">My Friends</a></li>
    </ul>
    
    <div ui-view="dashboard_view"></div>
    

    您可以了解更多详情:

    Multiple Named Views

    Nested States and Nested Views

    【讨论】:

    • 感谢您的 Mohan。我不认为它是这样工作的。如果我将状态 dashboard 设置为抽象,它实际上不再可用。既不使用锚点也不通过 url 也无法到达 /dashboard/me
    • @cq5beginner 这是使用嵌套视图的最佳实践。如果我们在主模板的 ui-view 中渲染视图,那么就没有使用 ui 路由。如果您仍有问题,我可以为您提供帮助,我可以为您创建一个演示应用程序。我只是想让你正确地实现 ui 路由。
    • 这个小演示会非常有用:) 同时我会尝试更多地调查
    猜你喜欢
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 2014-02-20
    相关资源
    最近更新 更多