2017-07-26 3 views
-1

C'est ma config:Comment définir params URL à l'intérieur état commun pour chaque état de l'enfant

 .state('index.oz', { 
     abstract: true, 
     url: '/oz', 
     views: { 
      '[email protected]': { 
       templateUrl: "Views/oz/oz.html", 
       controller: 'ozController' 
      } 
     } 
    }) 
    .state('index.iz.a', { 
     url: '/a/:id', 
     params: { 
      id: { 
       value: null, 
       squash:true 
      } 
     }, 
     views: { 
      'ozTypeView': { 
       templateUrl: "Views/oz/a.html", 
       controller: "ozaController" 
      } 
     } 
    }) 
    .state('index.oz.b', { 
     url: '/b/:id', 
     params: { 
      id: { 
       value: null, 
       squash:true 
      } 
     }, 
     views: { 
      'ozTypeView': { 
       templateUrl: "Views/oz/ozb.html", 
       controller: 'ozbController' 
      } 
     } 
    }); 

Mes urls souhaitées sont:

/oz/a

/oz/b

/oz/a/45

/oz/b/12

Comment puis-je faire url dans chaque état de l'enfant afin que je ne dois pas dans chaque écriture d'état suivant morceau fo code:

 params: { 
      id: { 
       value: null, 
       squash:true 
      } 
     } 

Plus spedific, je peux mettre une certaine façon ce morceau de code à l'intérieur état abstrait parent , ou peut-être même définir l'identifiant de paramètre dans l'état parent, mais en gardant mes URLs souhaités comme mentionné ci-dessus? Fondamentalement, je vais avoir deux états enfants et je ne veux pas que chaque état répète le même code params.

Répondre

0

je suppose que vous ne pouvez pas directement, mais vous pouvez réduire la duplication de code comme ceci:

function stateWithId(name, cfg) { 
    cfg.url += '/:id'; 
    if (!cfg.params) { 
    cfg.params = {}; 
    } 
    cfg.params.id = { 
       value: null, 
       squash:true 
    }; 
    $stateProvider.state(name, cfg); 
} 

stateWithId('index.iz.a', { 
     url: '/a', 
     views: { 
      'ozTypeView': { 
       templateUrl: "Views/oz/a.html", 
       controller: "ozaController" 
      } 
     } 
    }); 
stateWithId('index.iz.b', { 
     url: '/b' 
});