【问题标题】:Hiding parameter from URL ui-sref (ui.router)从 URL ui-sref (ui.router) 隐藏参数
【发布时间】:2017-02-03 10:04:10
【问题描述】:

我的 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;
                            }
                        }]
                    }
                },

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

../video/data-statistician/5

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

../video/data-statistician

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

网址:“/video/:videoName

但问题是,如果我像上面那样编写代码,videoId 将不会包含在 $stateparams 对象中。

如何将视频 ID 传递给状态而不显示在 URL 中?

【问题讨论】:

  • @lin 你能用代码插图告诉我你的意思吗?感谢您的回复。

标签: javascript angularjs angular-ui-router


【解决方案1】:

如果你不想在 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;
                        }
                    }]
                }
                }

注意:状态定义中的 params 声明已更改为 params: { id: {} } from params: ['id']

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

UI-路由器版本:~v.0.2.10

【讨论】:

  • 工作就像一个魅力。谢谢!
【解决方案2】:

正如您所建议的,您可以通过将 url 设置为来传递参数而不让它们显示在 URL 中

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});

【讨论】:

  • 这就是我正在做的,我正在使用 HTML 解决方案。再次仔细阅读问题,看看我的问题是什么。不过感谢您的回复。
  • @Tatenda 它的杯子可以对试图帮助你的人投反对票。这与您标记为正确答案的方法相同(上图)。
  • @lin 我的声望为 24,低于我能够投票所需的 125。投反对票的不是我
  • 是的,我第一次写的时候忘记了这个重要的部分@Tatenda
猜你喜欢
  • 1970-01-01
  • 2015-03-11
  • 1970-01-01
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 2021-02-10
  • 2018-12-20
  • 1970-01-01
相关资源
最近更新 更多