微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

angularjs – Angular UI路由器 – 父级中的访问状态参数

我有一个Angular应用程序使用伟大的ui路由器.

我的设置看起来像:

.config( function ($stateProvider,$urlRouterProvider) {

    $stateProvider

    // PROJECT DETAIL
    .state('project',{
        url: '/project/:projectId/',resolve: {
            /* some base api calls */
        },views: {
            'task-list': {
                templateUrl: 'partials/task_list.tmpl.html',controller: 'TaskListCtrl',resolve: {
                    tasks: function ($stateParams,ConcernService) {
                        return ConcernService.get('project-tasks/',$stateParams.projectId);
                    },}
            },'concern-instance': {
                /* some resolved variables */
            }
        }
    })
    .state('project.task',{
        url: 'task/:taskId/',views: {
            'concern-instance@': {
                /* some different resolved variables */
            },}
    })

这一切都像黄油一样工作.但是在我的task_list模板中,在状态project.task中,我想要能够访问taskId参数,所以我可以突出显示活动的导航链接,即使url是#/ project / 123 / task / 456 / taskId是空的.我明白这是因为模板只能访问为该状态声明的参数.所以如果我想在project.task状态下获取taskId,该怎么办?我需要在porject.task中重新声明任务列表吗?

任何帮助非常感谢.

在UI-Router文档 here中,他们解释说

“the $stateParams object will only contain the params that were
registered with that state.”

您只能使用父级的resolve属性访问子状态中的父状态参数.

把它放在你的’项目’状态(父):

...    
resolve: {
    // Expose projectId parameter to child states
    projectId: ['$stateParams',function ($stateParams) {
        return $stateParams.projectId;
    }]
},

然后在您的控制器内为您的状态“project.task”(子),您应该可以访问这两个

$stateParams.projectId

$stateParams.taskId

原文地址:https://www.jb51.cc/angularjs/143098.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐