Как получить параметры маршрута в выражении с помощью AngularDart?


Я пытаюсь перейти непосредственно от URL, управляемого маршрутом, к значению атрибута. Какой самый простой способ сделать это?

У меня есть маршрут, который выглядит так:

  ..addRoute(
      name: 'activities',
      path: '/activities',
      enter: view('views/activities.html'),
      mount: (Route route) => route
        ..addRoute(
            name: 'view',
            path: '/:activityId',
            enter: view('views/activity.html')));

Я ожидаю, что сработает следующее:

/activities /activities/f4f3j4093j4f

Содержание views/activity.html:

<activity-photo activity-id="{{how to get this? I have it in the route}}"></activity-photo>
Как вы можете видеть, мое представление - это просто пользовательский элемент с одним пользовательским атрибутом. Могу ли я заполнить этот пользовательский атрибут непосредственно из route param?
1 3

1 ответ:

Для любого компонента/директивы/контроллера внутри представления вы можете попросить ввести RouteProvider, который имеет parameters поле (карту).

@NgComponent(
    selector: 'activity-photo',
    ...)
class ActivityPhotoComponent {
  ActivityPhotoComponent(RouteProvider routeProvider) {
    String activityId = routeProvider.parameters['activityId'];
    _loadActivity(activityId);
  }
}

Это немного отличается от того, как вы указываете в своем примере. Использование здесь было бы:

<activity-photo></activity-photo>

И фотография активности найдет идентификатор активности самостоятельно.

В качестве альтернативы, вы можете создать контроллер для представления, но я думаю, что вам нужно будет обернуть шаблон другим тегом... Пример:

<div id="activity-view">
  <activity-photo activity-id="ctrl.activityId"></activity-photo>
</div>

.

@NgController(
    selector: '#activity-view',
    publishAs: 'ctrl')
class ActivityViewController {
  String activityId;

  ActivityViewController(RouteProvider routeProvider) {
    String activityId = routeProvider.parameters['activityId'];
  }
}