我有一个基本的Angular Dart程序,目前允许登录并在登录时显示基本仪表板。我想要做的是在成功登录后重定向到仪表板路径。我不知道如何从登录控制器中访问路由器对象,尝试使用DI将Router
加载到控制器工作中但是给我一个新的Router
对象而不是之前初始化的对象(如预期的那样。)
main.dart
import 'package:angular/angular.dart';
import 'dart:convert' show JSON;
import 'dart:html';
class TTRouter implements RouteInitializer {
Cookies _cookies;
TTRouter(this._cookies);
init(Router router, ViewFactory view) {
router.root
..addRoute(
name: 'login',
path: '/login',
enter: view('login.partial.html'))
..addRoute(
name: 'home',
path: '/dashboard',
enter: view('dashboard.partial.html'));
}
}
@NgController(
selector: '[login-controller]',
publishAs: 'ctrl')
class LoginController {
Http _http;
Scope _scope;
LoginController(this._scope, this._http);
login() {
// Login API request ommitted
// TODO: insert redirect to 'home' route here
}
}
class TTModule extends Module {
TTModule() {
type(RouteInitializer, implementedBy: TTRouter);
type(LoginController);
factory(NgRoutingUsePushState,
(_) => new NgRoutingUsePushState.value(false));
}
}
main() => ngBootstrap(module: new TTModule());
login()
使用登录部分视图中的ng-submit="ctrl.login()
进行调用。
如果我以错误的方式接近这一点,我将非常感谢对代码结构的任何评论。我是Dart和Angular的新手(阅读/观看教程,但这是我自己构建的第一个应用程序)。
答案 0 :(得分:3)
如果您将路由器value
添加到模块而不是type
,则每次都会获得相同的实例。
TTModule() {
value(RouteInitializer, new TTRouter());
}
答案 1 :(得分:1)
尝试使用NgRoutingHelper。
class LoginController {
Http _http;
Scope _scope;
NgRoutingHelper locationService;
LoginController(this._scope, this._http, NgRoutingHelper this.locationService );
login() {
// Login API request ommitted
// TODO: insert redirect to 'home' route here
locationService.router.go('home', {} );
}
}
不要忘记在模块中添加服务
type(NgRoutingHelper );
答案 2 :(得分:1)
你应该总是得到Router
的同一个实例 - 只能有一个,否则会发生不可预知的事情。
class LoginController {
Http _http;
Scope _scope;
Router _router;
LoginController(this._scope, this._http, this._router);
login() {
_router.go('home', {} );
}
}