0

Я передаю значение из одного состояния в другое с помощью UI-Router. В моем контроллере, когда обновляется url, я пытаюсь получить доступ ко второму параметру моего url, используя $stateParams, но по какой-то причине я могу получить доступ к первому параметру, но второй - НЕ УКАЗАН. Это мой код:

состояние 1, URL:

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

состояние 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

ли это работает '«/ Деталь: submissionIdd»,' – Rakeschand

+0

я пытался этим вариантом, но не знают, почему я все еще могу получить первые из параметров, но не второй. –

ответ

0

Вы можете не передавать параметры в URL-адресе, если нет явного требования. Я бы предпочел использовать $ stateParams в контроллере для извлечения данных. Для этого вам нужно определить параметры по умолчанию в состоянии , чтобы он работал.

$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

Что делать, если я не перехожу из второго состояния из предыдущего состояния, если не набираю полный URL-адрес http: // localhost: 16009/#/5nqeAPqlv21/details/PP163Ku3dOR. Фактически мне нужно получить этот параметр, если пользователь обновит страницу, поэтому я могу получить данные. Во всяком случае, я все еще не вижу второй параметр, используя ваш вариант. не знаю, что не так –

2

вы испытываете стандартное поведение UI-маршрутизатора и Parent/Child состояние Defintion:

  • метрополия объявляет $ stateParams (как url: '/:token/') - так что есть только один объявлен - a token
  • дочернее состояние получает все от родителя (ов), плюс объявляет новый параметр (как url: 'details/{submissionIdd}') - так оно и определено - token и submissionIdd,

Таким образом, в то время как ребенок имеет доступ к обоим Params, родительское состояние имеет только параметр маркер

состояние 1 = == РОДИТЕЛЕЙ, URL:

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

здесь мы будем иметь submissionIdd неопределенными

состояние 2 === РЕБЕНОК, URL:

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

оба там submissionIdd=PP163Ku3dOR и token=5nqeAPqlv21

Extend - there is a working plunker

Это утверждает определение (в plunker немного корректируется)

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

будет надлежащим образом sh OW состояния Титулы этих связей

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

Проверить это here

+0

Поскольку мы можем сказать, что ** '$ stateParams' ** являются локальными для **' state' **, где как ** '$ state.params' ** являются глобальными. У них есть словарь всех параметров, исправьте меня, если я ошибаюсь, спасибо :) –

+0

почему, если я выполняю непосредственно в браузере (вводя весь URL-адрес) http: // localhost: 16009/#/5nqeAPqlv21/details/PP163Ku3dOR; мой контроллер только печатает токен (первый параметр). не понимаю. –

+0

Существует ссылка на plunker http://plnkr.co/edit/rJMPRbD5S1YYvSkJrhq4?p=preview, он должен показать все это в действии, надеюсь, что это поможет –

 Смежные вопросы

  • Нет связанных вопросов^_^