Как я могу узнать при загрузке первой страницы, каков текущий маршрут, из директивы (AngularDart)?

Как я могу узнать, при загрузке первой страницы, каков текущий маршрут из директивы?

Не уверен, что это ошибка, или я не правильно настраиваю. У меня есть директива, которая вводит Router. Я прослушиваю события router.onRouteStart, и когда я перезагружаю страницу, событие routeStart не запускается. Я получаю события routeStart, когда вручную запускаю изменения маршрута.

Моя директива выглядит так:

@NgDirective(
    selector: '[current-route]'
)
class CurrentRoute {
  Router router;
  Element element;

  CurrentRoute(this.element, this.router) {
    toggleActive();

    router.onRouteStart.listen((e) {
      toggleActive();
    });
  }

  bool isRoute() {
    print(router.activePath);
    print(router.root);
    if (router.activePath.isEmpty) return false;
    return element.attributes['current-route'] == router.activePath.first.name;
  }

  void toggleActive() {
    if (isRoute()) {
      element.classes.add('active');
    } else {
      element.classes.remove('active');
    }
  }
}

Когда я впервые

print(router.activePath);   // empty list
print(router.root);  // null

По сути, я хочу установить класс CSS для элемента, если этот элемент соответствует текущему маршруту. Я предполагаю, что директива с маршрутизатором - это путь, но, возможно, есть что-то лучше.


person Seth Ladd    schedule 03.02.2014    source источник
comment
Может быть, лучший способ спросить: как мне узнать, какой маршрут по умолчанию, если у меня есть маршрутизатор?   -  person Seth Ladd    schedule 03.02.2014


Ответы (1)


Возможно, вам нужно дождаться завершения маршрутизации:

var subscription;
subscription = router.onRouteStart.listen((e) {
  subscription.cancel();
  e.completed.then((_) {
    toggleActive();
  });
});
person pavelgj    schedule 03.02.2014
comment
Интересно, а почему вы отменяете подписку? В моем конкретном случае у меня есть директива, прослушивающая изменения. Я предполагаю, что есть один экземпляр директивы для каждого узла, к которому она прикреплена. Поэтому мне не нужно отменять, потому что я всегда хочу знать об изменениях. - person Seth Ladd; 03.02.2014
comment
ЗАМЕЧАТЕЛЬНО, спасибо! Вот и все. Ожидания завершения маршрута достаточно для начальной загрузки страницы. - person Seth Ladd; 03.02.2014
comment
Если вы можете гарантировать наличие только одного экземпляра директивы, то все в порядке, но в противном случае это может привести к неприятной утечке памяти. - person pavelgj; 04.02.2014
comment
У меня есть несколько элементов с этой директивой. И я хочу, чтобы каждый элемент постоянно прослушивал события маршрута. - person Seth Ladd; 04.02.2014
comment
@pavelgj, почему onRouteStart вызывается дважды в моей программе angular.dart, так задумано? (У меня есть 2 ng-view, один встроен в другой) - person adarshaj; 15.04.2014
comment
Это только при первой загрузке или каждый раз? - person pavelgj; 16.04.2014