0

Ich übergebe einen Wert von einem Zustand zu einem anderen mit UI-Router. In meinem Controller, wenn die URL aktualisiert wird, versuche ich Zugriff auf den zweiten Parameter meiner URL mit $stateParams, aber aus irgendeinem Grund kann ich Zugriff auf den ersten Parameter, aber die zweite ist UNDEFINED. Dies ist mein Code:

Zustand 1 URL:

http://localhost:16009/#/5nqeAPqlv21/ 

Zustand 2 URL:

http://localhost:16009/#/5nqeAPqlv21/details/PP163Ku3dOR 

candidateContoller.js:

//go to state 2 (same controller for parent and child views) 
$state.go('index.details', { "submissionIdd": publicSubmissionId }); 

//when located in the new state and new url: 
console.log($stateParams.submissionIdd); //shows undefined 
console.log($stateParams.token); //shows 5nqeAPqlv21 

App.js:

$stateProvider  
    .state('index', 
     { 
      url: '/:token/', 
      views: { 
       '': { 
        templateUrl: 'AngularJS/Templates/indexView.html', 
        controller: 'candidateController as candCtrl' 
       }, 
       '[email protected]': { 
        templateUrl: (_isNotMobile) 
         ? 'AngularJS/Templates/candidatesView.html' 
         : 'AngularJS/Templates/candidatesMobileView.html' 
       } 
      } 

     })   

    .state('index.details', { 
     url: 'details/{submissionIdd}', 
     views: { 
      '[email protected]': { 
       templateUrl: (_isNotMobile) 
        ? 'AngularJS/Templates/candidateView.html' 
        : 'AngularJS/Templates/candidateMobileView.html' 
      } 
     } 
    }) 
+0

Hat das funktioniert ' 'Details /: submissionIdd',' – Rakeschand

+0

ich diese Option versucht, aber weiß nicht, warum ich immer noch den ersten param bekommen kann, aber nicht der zweite. –

Antwort

0

Sie können es vorziehen, die Parameter in der URL nicht zu übergeben, es sei denn, es gibt eine explizite Anforderung. Ich würde lieber $ stateParams im Controller verwenden, um die Daten zu holen. Dazu müssen Sie die Standardparameter im Zustand definieren, damit es funktioniert.

$stateProvider .state('index.details', { 
     url: 'details', 
      params: { 
       submissionIdd: 'default', 
      }, 
     views: { 
      '[email protected]': { 
       templateUrl: (_isNotMobile) ? 'AngularJS/Templates/candidateView.html' : 'AngularJS/Templates/candidateMobileView.html' , 
      controller: function($stateParams){ 
         console.log($stateParams.submissionIdd) 
        } 
      } 
     } 
    }) 
+0

Was passiert, wenn ich nicht aus einem vorherigen Zustand in den zweiten Zustand gehe, wenn ich nicht die vollständige URL eingeben http: // localhost: 16009/#/5nqeAPqlv21/Details/PP163Ku3dOR. Eigentlich muss ich diesen Parameter erhalten, wenn der Benutzer die Seite aktualisiert, damit ich die Daten abrufen kann. Jedenfalls kann ich den zweiten Parameter immer noch nicht mit Ihrer Option sehen. weiß nicht, was falsch ist –

2

Sie tun Erfahrung Standardverhalten des UI-Router und Eltern-/Kind- Zustand Defintion:

  • Mutter Zustand erklärt $ stateParams (als url: '/:token/') - so gibt es nur eine erklärt - token
  • untergeordneter Status ruft alle von übergeordneten Elementen ab und deklariert einen neuen Parameter (wie url: 'details/{submissionIdd}') - so hat es beide definiert - token und submissionIdd,

So, während Kind Zugang zu beiden params hat, Mutter Zustand

Zustand 1 = nur ein Token Parameter hat == ELTERN, URL:

http://localhost:16009/#/5nqeAPqlv21/ 

hier haben wir submissionIdd undefined

Zustand 2 === CHILD, URL:

http://localhost:16009/#/5nqeAPqlv21/details/PP163Ku3dOR 

beide dort submissionIdd=PP163Ku3dOR und token=5nqeAPqlv21

Extend - there is a working plunker

Diese Definition Zustände (im Plunker ein Bit eingestellt)

.state('index', 
    { 
     url: '/:token/', 
     views: { 
      '': { 
       templateUrl: 'indexView.html', 
       controller: 'candidateController as candCtrl' 
      }, 
      '[email protected]': { 
       templateUrl: 'parent.html' 
      } 
     } 

    })   

.state('index.details', { 
    url: 'details/{submissionIdd}', 
    views: { 
     '[email protected]': { 
      templateUrl:'child.html', 
     } 
    }) 

wird richtig sh ow Zustand params für diese Links

href 
<a href="#/5nqeAPqlv21/"> 
<a href="#/5nqeAPqlv21/details/PP163Ku3dOR"> 
<a href="#/5nqeAPqlv21/details/other"> 
ui-sref 
<a ui-sref="index({token: '5nqeAPqlv21'})"> 
<a ui-sref="index.details({token: '5nqeAPqlv21', submissionIdd: 'another'})"> 

Check it here

+0

Da können wir sagen: ** '$ stateParams' ** sind lokal zu **' state' ** wo ** ** $ state.params' ** global sind. Sie haben Wörterbuch aller Parameter, korrigieren Sie mich, wenn ich falsch liege, Danke :) –

+0

Warum, wenn ich direkt im Browser (Eingabe der gesamten URL) ausführen http: // localhost: 16009/#/5nqeAPqlv21/Details/PP163Ku3dOR; Mein Controller druckt nur Token (der erste Parameter). verstehe nicht. –

+0

Es gibt einen Link zu Plunker http://plnkr.co/edit/rJMPRbD5S1YYvSkJrhq4?p=preview es sollte alles in Aktion zeigen, hoffe es hilft –

Verwandte Themen