Angular ui-router-comment accéder aux paramètres dans la vue imbriquée, nommée, transmise à partir du modèle parent?

Salut, j'essaie d'accéder à un paramètre dans le contrôleur "ViewWorklogCrtl" tout en utilisant ui-router et en difficulté.

Fondamentalement, mon modèle parent contient:

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

Puis plus bas sur la page:

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

, Puis dans mon application.js, contenant des informations de routage côté client en bref j'ai:

 $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'
      }
  }
  })

Le chargement du modèle fonctionne correctement, le problème et la question auxquels je ne trouve pas de réponse sont: comment accéder à "testnum" en cours de transmission via l'interface utilisateur-sref lien, vers et dans le ViewWorkLogCtrl... Est-il une meilleure approche?

Merci beaucoup!!!

59
demandé sur hzane 2014-01-13 21:39:51

2 réponses

Le instanceID est déclaré en tant que paramètre, donc nous pouvons y accéder comme ceci

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

Tous les autres détails pourraient être trouvés ici https://github.com/angular-ui/ui-router/wiki/URL-Routing

Et l'appel de ui-sref devrait être comme ceci

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

Étendre:

Dans le cas où nous aimerions obtenir deux paramètres, 1) instanceID du parent 2) testnum du courant, nous devons ajuster la définition d'état comme ceci

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

Et le ui-sref

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

Et nous pouvons y accéder comme ceci:

.controller('ViewWorklogCrtl',
    [       '$scope','$stateParams'
    function($scope , $stateParams ) {    
        // 
        console.log($stateParams.instanceID)
        console.log($stateParams.testnum)
        ...
105
répondu Radim Köhler 2014-01-13 18:25:52

J'ai écrit une directive personnalisée pour résoudre ce problème.

<a my-sref="{{myStateVar}}">awesome link</a>

Vous pouvez le cloner à partir de Github: https://github.com/JensEger/Angular-Directives/tree/master/ui-router-helper

4
répondu Jens Eger 2015-06-19 10:20:20