Angularjs在嵌套路由上触发父控制器

时间:2014-09-05 15:48:53

标签: angularjs routes

我对嵌套路线有挑战,在角度js中,这是app.js中的片段

...
    when('/profile/:id', {
        templateUrl: 'partials/profile',
        controller: 'profileCtrl'
    }).
    when('/profile/:id/editTaskList', {
        templateUrl: 'partials/editTaskList',
        controller: 'checkListCtrl',
        activeMenu: 'editTaskList'
    }). 
...

我想要在“/ profile /:id”下的每一条路线中访问“个人资料数据”

“个人资料数据”示例为:

{
   user: "demo",
   title: "dev"
}

它来自基于路径中的ID的AJAX(JSON)

现在设置的方式是获取用户个人资料的服务,并在“ profileCtrl ”中为个人资料ID提出服务请求。

我遇到的问题是,如果有人共享网址并立即转到“/ profile /:id / editTaskList”,则“profileCtrl”不会触发。

我不认为通过在“checkListCtrl”中添加服务请求是一个好习惯,因为我在“profile”下会有更多的嵌套路由,并且需要在多个控制器中复制代码。 /强>

解决此问题的最佳做法是什么?如果我可以在“/ profile /:id”或更低的时候点击“profileCtrl”,对我来说也会工作

1 个答案:

答案 0 :(得分:0)

您可以在初始化控制器之前获取数据

...
    when('/profile/:id', {
        templateUrl: 'partials/profile',
        controller: 'profileCtrl',
        resolve: {
         profile: ['ProfileService','$route', function (ProfileService,$route) {
                 return  ProfileService.getProfile($route.current.params.id);
            }]

        },
    }).
    when('/profile/:id/editTaskList', {
        templateUrl: 'partials/editTaskList',
        controller: 'checkListCtrl',
         resolve: {
         profile: ['ProfileService','$route', function (ProfileService,$route) {
                 return  ProfileService.getProfile($route.current.params.id);
            }]

        },
        activeMenu: 'editTaskList'
    }). 
...

控制器将

function myCtrl($scope,profile){
// now profile is your data 
}