如何在 UI-router 中使 URL 更简单
How to make URL simplier in UI-router
这是我的 $stateProvider
配置:
.state('itemDetail', {
abstract: true,
url: '/itemDetail/general/:itemid',
controller: 'ItemDetailsController',
templateUrl: './partials/itemDetails.html'
})
.state('itemDetail.general', {
url: "",
controller: 'ItemDetailsController',
templateUrl: "./partials/itemDetails.General.html"
})
.state('itemDetail.file', {
url: "/file/:itemid",
controller: 'ItemDetailsController',
templateUrl: "./partials/itemDetails.File.html"
})
用户可以使用#/itemDetail/general/96045
查看项目,也可以点击link查看文件附件。现在可以使用了,但是文件的 URL 现在是 #/itemDetail/general/96045/file/96045
.
是否可以将文件 URL 作为 #/itemDetail/file/96045
?
是的,您可能需要将状态设为
.state('itemDetail.file', {
url: '/{itemId}',
controller: 'ItemDetailsController',
templateUrl: 'partials/itemDetails.html'
})
好吧,我会选择 一个 父级和 one child
状态。有a working plunker
这将是新的子状态 itemDetail.type
:
.state('itemDetail', {
abstract: true,
url: '/itemDetail',
controller: 'ItemDetailsController',
templateUrl: 'partials/itemDetails.html'
})
.state('itemDetail.type', {
url: "/:type/:itemid",
controller: 'ItemDetailsController',
templateProvider: ['$stateParams', '$templateRequest',
function($stateParams, $templateRequest) {
var url = "partials/itemDetails.General.html";
if($stateParams.type === "file"){
url = "partials/itemDetails.File.html"
}
return $templateRequest(url);
}],
})
我们在这里使用 $stateParams.type
来决定加载哪个模板 (以及 $templateRequest
从 angula 内置缓存中获利)
这将是调用 html:
<a ui-sref="itemDetail.type({type:'general', itemid:1})">
<a ui-sref="itemDetail.type({type:'file', itemid:22})">
url 现在看起来和预期的一样
检查一下here
这是我的 $stateProvider
配置:
.state('itemDetail', {
abstract: true,
url: '/itemDetail/general/:itemid',
controller: 'ItemDetailsController',
templateUrl: './partials/itemDetails.html'
})
.state('itemDetail.general', {
url: "",
controller: 'ItemDetailsController',
templateUrl: "./partials/itemDetails.General.html"
})
.state('itemDetail.file', {
url: "/file/:itemid",
controller: 'ItemDetailsController',
templateUrl: "./partials/itemDetails.File.html"
})
用户可以使用#/itemDetail/general/96045
查看项目,也可以点击link查看文件附件。现在可以使用了,但是文件的 URL 现在是 #/itemDetail/general/96045/file/96045
.
是否可以将文件 URL 作为 #/itemDetail/file/96045
?
是的,您可能需要将状态设为
.state('itemDetail.file', {
url: '/{itemId}',
controller: 'ItemDetailsController',
templateUrl: 'partials/itemDetails.html'
})
好吧,我会选择 一个 父级和 one child
状态。有a working plunker
这将是新的子状态 itemDetail.type
:
.state('itemDetail', {
abstract: true,
url: '/itemDetail',
controller: 'ItemDetailsController',
templateUrl: 'partials/itemDetails.html'
})
.state('itemDetail.type', {
url: "/:type/:itemid",
controller: 'ItemDetailsController',
templateProvider: ['$stateParams', '$templateRequest',
function($stateParams, $templateRequest) {
var url = "partials/itemDetails.General.html";
if($stateParams.type === "file"){
url = "partials/itemDetails.File.html"
}
return $templateRequest(url);
}],
})
我们在这里使用 $stateParams.type
来决定加载哪个模板 (以及 $templateRequest
从 angula 内置缓存中获利)
这将是调用 html:
<a ui-sref="itemDetail.type({type:'general', itemid:1})">
<a ui-sref="itemDetail.type({type:'file', itemid:22})">
url 现在看起来和预期的一样
检查一下here