我有两个路线组,“动漫”和“漫画”。这些URL是/ anime/或/manga/,但它们都共享完全相同的控制器和模板
(唯一不同的是用于每个模板的配色方案,但这些颜色是在检查是否通过过滤器的过滤器中确定的)正在查看的特定项目是动漫还是漫画) :
动漫陈述定义:
.state('anime', {
url: "/anime?genres&tags&year&season&page&perpage&sortBy&order",
templateUrl: "views/titles-index.html",
controller: 'TitleIndexController',
data: {
type: 'anime'
},
ncyBreadcrumb: {
label: 'Anime'
}
}).state('anime-detail', {
url: "/anime/:id/:slug",
controller: 'TitleDetailController',
templateUrl: "views/titles-detail.html",
ncyBreadcrumb: {
parent: 'anime-index',
label: '{{item.title_main}}'
}
}).state('anime-detail.anime-reviews', {
url: '/reviews',
controller: 'TitleReviewsController',
templateUrl: 'views/titles-reviews.html',
ncyBreadcrumb: {
label: 'Reviews'
}
漫画状态定义:
}).state('manga', {
url: "/manga?genres&tags&year&season&page&perpage&sortBy&order",
templateUrl: "views/titles-index.html",
controller: 'TitleIndexController',
data: {
type: 'manga'
},
ncyBreadcrumb: {
label: 'Manga'
}
}).state('manga-detail', {
url: "/manga/:id/:slug",
controller: 'TitleDetailController',
templateUrl: "views/titles-detail.html",
ncyBreadcrumb: {
parent: 'manga-index',
label: '{{item.title_main}}'
}
}).state('manga-detail.manga-reviews', {
url: '/reviews',
controller: 'TitleReviewsController',
templateUrl: 'views/titles-reviews.html',
ncyBreadcrumb: {
label: 'Reviews'
}
})
如您所见,其中已经有很多重复,我一点都不喜欢。随着我不断添加新路线,重复次数只会增加 (您已经可以看到manga-views和anime-reviews,其中还会有更多) 。
另一个问题是我必须使用长名称,例如manga-detail
,anime-detail
而不是简单的“详细信息”。
我考虑过要实现一个更简单的样式,例如 /browse/
和,/browse/?view=anime
但是看起来丑陋,而且ncyBreadcrumbs也会遇到问题,因为索引不是细节的直接父项。
拥有/anime/
和/manga/
url也是更加用户友好的方式,但是如果有人有更好的主意,我希望切换,只要它消除了重复。
我必须将其用于ui-sref:
ui-sref="{{item.title_type}}-detail({id: item.id, slug: slugify(item.title_main)})"
对于儿童来说,这几乎行不通,根本不起作用。
我一直在用我的路由器的结构来敲击墙壁,说实话,我无法克服这个问题,所以我现在有些困惑,希望能得到任何帮助。
有一个工作的家伙
这里的解决方案非常简单,而且您已经去过那里。我们用参数替换 “动漫” 或/和 “漫画” -例如 :oneForBoth
.state('oneForBoth', {
url: "/:oneForBoth?genres&tags&year&season&page&perpage&sortBy&order",
templateUrl: "views/titles-index.html",
controller: 'TitleIndexController',
data: {
// should be $stateParams.oneForBoth
//type: 'anime'
},
ncyBreadcrumb: {
label: '{{$stateParams.oneForBoth}}'
}
}).state('oneForBoth-detail', {
url: "/:oneForBoth/:id/:slug",
controller: 'TitleDetailController',
templateUrl: "views/titles-detail.html",
ncyBreadcrumb: {
parent: 'oneForBoth',
label: '{{item.title_main}}'
}
}).state('oneForBoth-detail.oneForBoth-reviews', {
url: '/reviews',
controller: 'TitleReviewsController',
templateUrl: 'views/titles-reviews.html',
ncyBreadcrumb: {
label: 'Reviews'
}
现在,从用户角度 (以及 'ncy-angular-breadcrumb'
角度)
<a href="#/manga">
<a href="#/manga/theId/theSlug">
<a href="#/manga/theId/theSlug/reviews">
<a href="#/anime">
<a href="#/anime/theId/theSlug">
<a href="#/anime/theId/theSlug/reviews">
在这里检查
正如Dylan Watt指出的那样,这将支持的任何值
'oneForBoth'
。因此,我们可以设置一些限制,如下所示:
这是更新的plnkr
这些是我们的扩展代码,仅支持动漫和漫画
.state('oneForBoth', {
url: "/{oneForBoth:(?:anime|manga)}?genres&tags&year&season&page&perpage&sortBy&order",
templateUrl: "views/titles-index.html",
controller: 'TitleIndexController',
data: {
// should be $stateParams.oneForBoth
//type: 'anime'
},
ncyBreadcrumb: {
label: '{{$stateParams.oneForBoth}}'
}
最重要的部分是对URL的限制:
url: "/{oneForBoth:(?:anime|manga)}?
在这里检查
anu可以完美与react-router搭配使用。 但强烈建议使用reach router, 这个比react router更好用。 anujs也对它进行改造,让它支持IE8的hashchange reach的官网 https://reach.tech/router resolve: { alias: { react: "anujs", "react-dom":
添加一个自定义的路由器 $prepend = false; Swoole::$php->addRouter(new App\MyRouter, $prepend); 第一个参数为路由器对象,必须实现Swoole\IFace\Router接口 第二个参数如果为true,表示添加到路由表的起始位置,默认为false,表示追加到末尾 底层默认添加了2个路由器Swoole\Router\Rewrite和
路由闭包 绝不 在路由配置文件里书写『闭包路由』或者其他业务逻辑代码,因为一旦使用将无法使用 路由缓存 。 路由器要保持干净整洁,绝不 放置除路由配置以外的其他程序逻辑。 Restful 路由 必须 优先使用 Restful 路由,配合资源控制器使用,见 文档。 超出 Restful 路由的,应该 模仿上图的方式来定义路由。 resource 方法正确使用 一般资源路由定义: Route::res
Faygo路由器由 MuxAPI API信息与 httprouter 路由两层构成。这样既满足记录详细API信息的需求,又能够保持真实路由的高性能。 MuxAPI API信息层: 属于预注册路由,对外提供无限层级的路由注册功能,支持树状与链状两种注册形式 记录全部API信息,如请求方法、请求路径、请求参数、API名称、API注意事项、API响应说明、操作链(Handler与Middleware)等
我需要多个嵌套路由 我用的是react-router-dom的v4 我有我的 我需要组件渲染成这样 Home组件包含Page1、Page2和Page3组件共有的标题组件,但不存在于Login和About中。 我的js代码是这样读的 我希望登录组件只显示在 /login当我请求 /page1、 /page2、 /page3时,它们应该分别包含主页组件和该页面的内容。 取而代之的是呈现的登录组件,在该
如果我将路由折叠起来,这样看起来就像: 工作很好。我嵌套的原因是因为我将在“dashboard”下有多个子项,并且希望它们都在URL中以为前缀。