隐藏URL ui-sref(ui.router)中的参数

时间:2017-02-03 10:04:10

标签: javascript angularjs angular-ui-router

我的HTML如下:

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

然后我在我的js文件中检索参数videoName和videoId,如下所示

.state("videoParent.Display.video", { 
            url: "/video/:videoName/:videoId", 
            views: {
                'video_info@videoParent': { 
                    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;
                            }
                        }]
                    }
                },

在我的网址中,我得到了这样的结果:

  

../视频/数据统计员/ 5

但是,我不希望显示 videoId(5),而是希望输出为:

  

../视频/数据统计员

我可以通过将状态的url部分写为:

来实现所需的结果
  

网址:&#34; / video /:videoName

但问题是,如果我按上述方式编写代码,则videoId将不会包含在$ stateparams对象中。

如何将视频ID传递给未显示在网址中的状态?

2 个答案:

答案 0 :(得分:2)

如果您不希望在URL中显示ID但需要使用stateparams传递ID,请尝试使用

.state("videoParent.Display.video", { 
            url: "/video/:videoName",
           params:{videoId:null}, 
            views: {
            'video_info@videoParent': { 
                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;
                        }
                    }]
                }
                }

注意:状态定义中的参数声明已更改为参数:{id:{}}来自参数:['id']

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

UI-router版本:~v.0.2.10

答案 1 :(得分:0)

根据您的建议,您可以通过将网址设置为

来传递参数,而无需在网址中显示这些参数
  

url:“/ video /: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});