2017-02-03 8 views
0

Мой HTML выглядит следующим образом:Скрытие от URL UI-sref (ui.router)

<a ui-sref="videoParent.Display.video({videoName:'[[sVid.slug]]', videoId:'[[sVid.videoID]]'})"><p>[[sVid.name]]</p></a> 

Я затем восстановить параметры videoName и VideoID в моем файле JS следующим

.state("videoParent.Display.video", { 
      url: "/video/:videoName/:videoId", 
      views: { 
       '[email protected]': { 
        templateUrl: "/partials/starred_video.html", 
        controller: "starredVideoController", 
        controllerAs: "starredVidsCtrl", 
        resolve: { 
         retrivedVideo: ['videosService', '$stateParams', function(videosService, $stateParams) { 
          if ($stateParams.videoId) {         
           var video = videosService.getVideoById($stateParams.videoId); 
           return video; 
          } 
         }] 
        } 
       }, 

В мой URL я получаю результат, как это:

../video/data-statistician/5

Однако, я не хочу, чтобы показать VideoID (5) и предпочел бы иметь свой выход как:

../video/data-statistician

Я могу достичь желаемого результата, написав url часть моего состояния как:

URL: «/ видео /: videoName

, но проблема в том, что если я пишу код, как и выше, VideoID не будет включен в $ stateparams объекта.

Как передать видеоизображение в состояние без указания URL-адреса?

+0

@lin могли бы вы любезно показал мне, что вы имеете в виду с кодом иллюстрации?Благодарю за ваш ответ. – Tatenda

ответ

3

Если вы не хотите, чтобы показать ID в URL, но нужно передать идентификатор с помощью stateparams, попробуйте этот

.state("videoParent.Display.video", { 
      url: "/video/:videoName", 
      params:{videoId:null}, 
      views: { 
      '[email protected]': { 
       templateUrl: "/partials/starred_video.html", 
       controller: "starredVideoController", 
       controllerAs: "starredVidsCtrl", 
       resolve: { 
        retrivedVideo: ['videosService', '$stateParams', function(videosService, $stateParams) { 
         if ($stateParams.videoId) {         
          var video = videosService.getVideoById($stateParams.videoId); 
          return video; 
         } 
        }] 
       } 
       } 

ПРИМЕЧАНИЕ. Объявление параметров в определении состояния изменилось на params: {id: {}} из параметров: ['id']

<a ui-sref="videoParent.Display.video({videoName:{sVid.slug}, videoId:{sVid.videoID}})"><p>[[sVid.name]]</p></a> 

версия UI-маршрутизатор: ~ v.0.2.10

+0

Работал как шарм. Спасибо! – Tatenda

+0

Отлично. теплое приветствие. – Ved

0

Как вы предложили, вы можете передать параметры без их отображения в URL, установив URL в

URL: «/ видео /: videoName

Вы можете добавить дополнительные параметры (не в URL), указав:

params: { 
     videoId: null 
    } 

Если вы хотите перейти в состояние и передавать параметры, вы можете сделать что-либо:

В HTML:

<a ui-sref="videoParent.Display.video({videoName: 'Rambo', videoId: 5})">Go to video</a> 

В Javascript:

$state.go('videoParent.Display.video', {videoName: 'Rambo, videoId: 5}); 
+0

Это то, что я делаю, я использую решение HTML. Внимательно прочитайте вопрос и посмотрите, была ли моя проблема. Спасибо, что ответили. – Tatenda

+0

@Tatenda свою кружку, чтобы уменьшить людей, которые пытаются помочь вам. Это тот же подход, который вы отметили как правильный ответ (см. Выше). – lin

+0

@lin моя репутация 24 и меньше, чем 125, необходимых для меня, чтобы иметь возможность downvote. Это был не я, который был опущен – Tatenda

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

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