2014-09-05 3 views
0

у меня есть проблемы с вложенными маршрутами, в угловых JS, вот фрагмент кода в app.jsAngularjs огонь родительский контроллер на вложенными маршрутах

... 
    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" 
} 

и он приходит через AJAX (JSON) на основе ID в раутах

Пути, как это установка в настоящее время, оказывает службы, чтобы получить профиль пользователя, и я делаю запрос на обслуживание для идентификатора профиля в «profileCtrl».

Проблема, которая у меня есть, если кто-то разделяет URL-адрес и сразу же переходит в «/ profile /: id/editTaskList», «profileCtrl» не срабатывает.

Я не думаю, что добавление запроса на обслуживание в «checkListCtrl» является хорошей практикой, потому что у меня будет больше вложенных маршрутов под «профилем», и для этого потребуется дублировать код на нескольких контроллерах.

Какова наилучшая практика для устранения этой проблемы? Для меня будет работать так же хорошо, если я могу стрелять «profileCtrl» все время, когда мы «/ профиль /: идентификатор» или ниже

ответ

0

вы можете получить данные, прежде чем вы контроллеры initalized

... 
    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 
} 
Смежные вопросы