我是Angular和Dart的新手,我正在编写一个具有分层次类别的应用程序。这可以用它们的ID来表示,该类别是该类别(包括其父级)的路径的斜线删除列表 - 换句话说,顶级类别的“category-1”,a的“category-1 / category-2”孩子,孙子的'category-1 / category-2 / category-3'。
我希望我的网址方案能够反映这种层次结构(即类别2,'#categages / category-1 / category-2')。
这是我当前的RouteInitializerFn(我正在控制器中为'categories'取出'categoryId'参数):
void routeInitializer(Router router, RouteViewFactory views) {
views.configure({
'subcategories' : ngRoute(
path: 'categories/:categoryId',
viewHtml: '<categories></categories>',
),
'categories': ngRoute(
path: 'categories',
viewHtml: '<categories></categories>',
),
});
}
但这似乎会在斜线上绊倒; URL'#categages / category-1 / category-2'的'categoryId'值为'category-1'。
AngularJS文档建议这可以在JS land(https://docs.angularjs.org/api/ngRoute/provider/ $ routeProvider - 'path'参数的文档中);我已经尝试改变我的路径,找到没有任何运气的各种排列,也无法在问题跟踪器中找到任何相关内容。
有什么想法吗?
编辑:
好的,我想我已经弄明白了。罪魁祸首是https://github.com/angular/route.dart/blob/master/lib/url_template.dart#L6 - 具体而言,与参数值匹配的正则表达式是“除字符串开头之外的任何字符或/”至少一次。我认为解决方法是将正则表达式更改为r'\?(。+)'(所有旧的单元测试仍然通过,我修改的新单元测试也是如此)。
不幸的是,它似乎没有临时的解决方法。你不能交换UrlMatcher的不同实现,因为UrlTemplate的使用被纳入ngRoute方法;如果要将NgRouteCfg的'path'参数更改为动态类型并断言它是String或UrlMatcher(这是route_hierarchical所做的内容,所以你可以直接传递它)这也是一个合理的解决方案,但目前看起来前进的道路是固定在头上。
答案 0 :(得分:1)
Angular-Dart教程也有一些信息
见:
mount参数允许您定义嵌套路由。
void recipeBookRouteInitializer(Router router, RouteViewFactory views) {
views.configure({
'add': ngRoute(
path: '/add',
view: 'view/addRecipe.html'),
'recipe': ngRoute(
path: '/recipe/:recipeId',
mount: {
'view': ngRoute(
path: '/view',
view: 'view/viewRecipe.html'),
'edit': ngRoute(
path: '/edit',
view: 'view/editRecipe.html'),
'view_default': ngRoute(
defaultRoute: true,
enter: (RouteEnterEvent e) =>
router.go('view', {},
startingFrom: router.root.findRoute('recipe'),
replace: true))
})
});
}