2014-06-07 44 views
2

我试过在AngularDart 0.11.0这句法:Angular Dart passing data from route service into a controller无法获得角镖路由器工作

module.value(RouteInitializerFn, configureRoutes); 

void configureRoutes(Router router, RouteViewFactory views) 
{ 
    print("configureRoutes"); 
    views.configure({ 
     'login': ngRoute(
      path: '/login', 
      view: 'login/login.tpl.html'), 
     'today': ngRoute(
      path: '/today', 
      view: '/today/today.tpl.html') 
}); 

然而,我的路由功能似乎永远不会被调用。我已经使用了打印语句和断点无济于事。当我尝试调用它像这样:

WorkoutLoggerApplication(this.rootScope, this.router) 
{ 
    print("WorkoutLoggerApplication::constructor"); 
    new Future.delayed(new Duration(seconds: 2),() 
     { 
      router.go("login", {}); 
     }); 
} 

我得到:

状态不好:无效路由名称:登录

我试过0.10.0,但没有骰子。我也尝试了3种新的绑定函数格式,这两种格式也似乎没有激发路由功能。

回答

2

我现在的例子也挣扎了很多。我结束了类似下面的例子。 NgRoutingUsePushState设置在0.11.0中是必要的,或者改变路由似乎不起作用,可能已经固定在0.12.0。

library myangular; 

import 'package:angular/angular.dart'; 
import 'package:angular/application_factory.dart'; 

class MyModule extends Module { 
    MyModule() { 
     bind(RouteInitializerFn, toValue: myRouteInitializer); 
     bind(NgRoutingUsePushState, toFactory: (_) => new NgRoutingUsePushState.value(false)); 
    } 
} 

void myRouteInitializer(Router router, RouteViewFactory views) { 
    views.configure({ 
    'foo': ngRoute(
     path: '/foo', 
     view: 'view/foo.html'), 
    'bar': ngRoute(
     path: '/bar', 
     view: 'view/bar.html', 
     defaultRoute: true), 
    }); 
} 

void main() { 
    applicationFactory() 
     .addModule(new MyModule()) 
     .run(); 
} 
1

这是现在我处理我的路由的方式,这也花了一段时间,但它的工作在AngularDart 0.12.0

在你的路由器的文件,你也会有这样的代码:

void configureRoutes(Router configureRoutes, RouteViewFactory view) { 

    configureRoutes.root 
     ..addRoute(
      name: 'login', 
      path: '/login', 
      enter: view('login/login.tpl.html') 
     ) 
     ..addRoute(
      name: 'today', 
      path: '/today', 
      enter: view('today/today.tpl.html') 
     ); 
} 

然后在您的模块的初始化类,你要添加该代码:

import 'package:angular/angular.dart'; 
import 'package:angular/application_factory.dart'; 
import 'package:angular/routing/module.dart'; 
import 'package:logging/logging.dart'; 

// router config import 
import 'my_router_config.dart'; 


class MainModule extends Module { 

    MainModule() { 
      this 
       // bind all you need and then bind routing 

       // ROUTING 
       ..bind(RouteInitializerFn, toValue: configureRoutes) 
       ..bind(NgRoutingUsePushState, 
        toFactory: (_) => new NgRoutingUsePushState.value(false)); 


    } 

    void main() { 
     //some logging logic and then init 
     Logger.root.level = Level.FINEST; 
     Logger.root.onRecord.listen((LogRecord r) { print(r.message); }); 
     applicationFactory() 
      .addModule(new MainModule()) 
      .run(); 
    } 
} 

最后,在一个控制器访问路由器,你只会做这样的:

@Controller(
     selector: '[some-controller]', 
     publishAs: 'c') 
class SomeController { 

    Router router; 

    SomeController(this.router) { 
     print(router); 
    }  
}