4

我有一个路由方案,该方案#/articles通向articles.html视图,并#/articles/featured通向featured.html. 不过,我不确定如何声明这种嵌套写作。如果我按如下方式配置我的路线,则两者都#/articles通向#/articles/featuredarticles.html因为两条路径都匹配 r'^articles')。

library my_router;

import 'package:angular/angular.dart';

class MyRouteInitializer implements RouteInitializer {
  init(Router router, ViewFactory view) {
    router.root
      ..addRoute(
          name: 'articles',
          path: '/articles',
          enter: view('views/articles.html'),
          mount: (Route route) => route
            ..addRoute(
                name: 'featured',
                path: '/featured',
                enter: view('views/featured.html'))

      );
  }
}

如果我省略该enter: view('views/articles.html')行,则#/articles/featured路线正确路由到featured.html,但没有任何路由到articles.html

4

2 回答 2

6

当您定义嵌套视图时,预计它们将由嵌套ng-views 呈现,但这似乎并不是您真正想要的。您使用扁平结构的解决方法可能没问题。或者,您可以执行以下操作:

class MyRouteInitializer implements RouteInitializer {
  init(Router router, ViewFactory view) {
    router.root
      ..addRoute(
          name: 'articles',
          path: '/articles',
          mount: (Route route) => route
            ..addRoute(
                name: 'all',
                path: '/all',
                default: true,
                enter: view('views/articles.html')
            ..addRoute(
                name: 'featured',
                path: '/featured',
                enter: view('views/featured.html'))
      );
  }
}
于 2014-01-21T18:05:15.567 回答
3

我可以通过避免mount和定义从特定到一般的路线来使其工作,但该解决方案似乎笨重且容易出错。正确的方法是使用mount并正确嵌套路由,但我无法让它工作。同时,这是一个临时解决方案:

import 'package:angular/angular.dart';

class MyRouteInitializer implements RouteInitializer {
  init(Router router, ViewFactory view) {
    router.root
      ..addRoute(
          name: 'featured',
          path: '/articles/featured',
          enter: view('views/featured.html'))
      ..addRoute(
          name: 'articles',
          path: '/articles',
          enter: view('views/articles.html'));
  }
}
于 2014-01-20T00:49:22.197 回答