我的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传递给未显示在网址中的状态?
答案 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});