Подтвердить что ты не робот

Angular ui-router - как получить доступ к параметрам во вложенном именованном представлении, переданном из родительского шаблона?

Привет. Я пытаюсь получить доступ к параметру в контроллере "ViewWorklogCrtl" при использовании ui-router и запутаться.

В принципе, мой родительский шаблон содержит:

a(ui-sref="instance-ticket.worklog({id:{{ticket.testnum}}})") show

а затем далее вниз:

section(ui-view="top-section")

Затем в моем приложении app.js, содержащем информацию о маршрутизации на стороне клиента, я:

 $stateProvider
.state('instance-ticket', {
  url: '/ticket/:instanceID',
  templateUrl: 'partials/instance-ticket',
  controller: 'ViewTicketCrtl'
})
.state('instance-ticket.worklog', {
  views:{
    'top-section':{
      templateUrl:'/partials/ticket.worklog.jade',
      controller: 'ViewWorklogCrtl'
      }
  }
  })

Загрузка шаблона работает правильно, проблема и вопрос, на которые я не могу найти ответ, - это как получить доступ к "testnum", проходящему через ссылку ui-sref, к и внутри ViewWorkLogCtrl... Есть ли лучший подход к этому?

Большое спасибо!!!

4b9b3361

Ответ 1

instanceID объявляется как параметр, поэтому мы можем обращаться к нему следующим образом

.controller('ViewWorklogCrtl',
    [       '$scope','$stateParams'
    function($scope , $stateParams ) {    
        // 
        $scope.instanceID = $stateParams.instanceID;
        ...

Все остальные детали можно найти здесь https://github.com/angular-ui/ui-router/wiki/URL-Routing

И вызов ui-sref должен выглядеть следующим образом:

<a ui-sref="instance-ticket.worklog({ instanceID:ticket.testnum })" >..

Расширение:

В случае, если мы хотим получить два параметра: 1) instanceID из родительского 2) testnum из текущего, мы должны отрегулировать состояние, как это показано

.state('instance-ticket', {
  url: '/ticket/:instanceID',      // instanceID
  templateUrl: 'partials/instance-ticket',
  controller: 'ViewTicketCrtl'
})
.state('instance-ticket.worklog', {
  // new param defintion
  url: '/worklog/:testnum',         // testnum
  views:{
    'top-section':{
      templateUrl:'/partials/ticket.worklog.jade',
      controller: 'ViewWorklogCrtl'
      }
  }

И ui-sref

<a ui-sref="instance-ticket.worklog({ instanceID:1, ticket.testnum:2 })" >..

И мы можем получить доступ к нему следующим образом:

.controller('ViewWorklogCrtl',
    [       '$scope','$stateParams'
    function($scope , $stateParams ) {    
        // 
        console.log($stateParams.instanceID)
        console.log($stateParams.testnum)
        ...