Как мне получить маршруты для работы с AngularDart?

Это мой код,

import 'package:angular/angular.dart';

class AppModule extends Module {

  AppModule(){
    type(AppController);
    type(LoginController);
    type(RouteInitializer, implementedBy: AppRouter);
  }

}

class AppRouter implements RouteInitializer {

  init(Router router, ViewFactory view) {
   router.root
    ..addRoute(
      name: 'login',
      path: '/login',
      enter: view('app/views/login.tpl.html'))
    ..addRoute(
       defaultRoute: true,
       name: 'index',
       enter: view('app/views/index.tpl.html'));
  }

}

@NgController(selector: '[app-ctrl]', publishAs: 'ctrl')
class AppController {

}

@NgController(selector: '[login-ctrl]', publishAs: 'ctrl')
class LoginController {

  Http _http;
  String works = 'Works.';

  LoginController(this._http);

}

Никакие маршруты не работают, нажатие на ссылку «#/login» не меняет URL-адрес или представление.

Журнал говорит

clicked /app/web/index.html#/login
route /app/web/index.html [Route: null]
route  [Route: index]

Что я делаю не так?


person Johan Alkstål    schedule 17.11.2013    source источник


Ответы (1)


С этим кодом может быть несколько проблем. Из того, что я вижу, наиболее вероятная проблема заключается в том, что маршрутизация использует pushState. Когда вы используете pushState, вы не манипулируете URL-адресом с помощью хеша. Дополнительную информацию об этом см. в разделе Управление историей браузера

Angular будет использовать состояние push, если браузер его поддерживает.

bind(NgRoutingUsePushState, toValue: new NgRoutingUsePushState.value(false));

Предоставляя вам модуль:

class AppModule extends Module {

  AppModule(){
    bind(AppController);
    bind(LoginController);
    bind(RouteInitializer, implementedBy: AppRouter);
    bind(NgRoutingUsePushState, toValue: new NgRoutingUsePushState.value(false));
  }
}

Другие возможные проблемы включают в себя:

  • Отсутствие директивы ng-view
  • Не устанавливать ng-bind-route в app/views/login.tpl.html и app/views/index.tpl.html.

Когда я сделал все эти изменения, ваш код работал правильно для меня при переходе к #/login

person Ted Sander    schedule 17.11.2013
comment
Я не понимаю ваш фрагмент кода. На какой фабрике и в каком контексте вы добавляете этот код? - person Johan Alkstål; 18.11.2013
comment
Фабрика добавлена ​​в модуль. Он отключается с помощью pushState для браузеров Html5. - person Ted Sander; 18.11.2013
comment
Или вы можете использовать привязку значения: value(NgRoutingUsePushState, new NgRoutingUsePushState.value(false)); - person pavelgj; 18.11.2013
comment
Как установить ng-bind-route - person 0xcaff; 24.02.2014
comment
ng-bind-route больше не нужен: blog.angulardart.org/2013/11/ angulardart-v091.html - person Scotty Waggoner; 26.06.2014