Dart 如何将服务注入RouteInitializerFn(新路由DSL)
我正在将我的应用程序切换到新的路由DSL。具体地说,我想用Dart 如何将服务注入RouteInitializerFn(新路由DSL),dart,angular-dart,Dart,Angular Dart,我正在将我的应用程序切换到新的路由DSL。具体地说,我想用preEnter做这样的事情: final RouteInitializerFn routes=(路由器路由器,视图工厂视图){ views.configure({ “聊天”:ngRoute( 路径:'/chat', //authService.requireState返回一个Future,并可能调用HttpRequest preEnter:(RoutePreEnterEvent e)=>e.allowEnter(authService.
preEnter
做这样的事情:
final RouteInitializerFn routes=(路由器路由器,视图工厂视图){
views.configure({
“聊天”:ngRoute(
路径:'/chat',
//authService.requireState返回一个Future,并可能调用HttpRequest
preEnter:(RoutePreEnterEvent e)=>e.allowEnter(authService.requireState(LOGGED_)),
视图:“views/chat.html”),
“登录”:ngRoute(
路径:“”,
defaultRoute:对,
视图:“views/login.html”)
});
}
这将在模块中进行如下配置:
值(RouteInitializerFn,routes)代码>
如果您没有找到它,我将在RouteInitializerFn
中引用一个可注入的authService
。这是不可能的,因为RouteInitializerFn
是一个函数而不是一个类,所以不能向其中注入任何内容。如果我将routes
函数封装在一个类中,我不确定如何配置RouteInitializerFn
,因此我有点进退两难 我找到了一个很酷的解决这个问题的方法。事实证明,如果在满足typedef的类上定义调用
方法,则可以将其配置为typedef的实现。很酷。以下是我的解决方案:
类路由
{
最终用户服务\u用户服务;
路由(此用户服务);
无效调用(路由器、视图、工厂视图)
{
views.configure({
“聊天”:ngRoute(
路径:'/chat',
preEnter:(RoutePreEnterEvent e)=>e.allowEnter(this.\u userService.requireUserState(userService.LOGGED\u)),
视图:“views/chat.html”
),
“登录”:ngRoute(
路径:“”,
defaultRoute:对,
视图:“views/login.html”
)
});
}
}
这是模块内的配置方式:
//旧语法
类型(RouteInitializerFn,实现者:Routes);
//新语法
绑定(RouteInitializerFn,toImplementation:Routes);
这个简洁的解决方案似乎已被Dart 1.5打破。我现在得到了“非法参数:没有为Routes提供类型工厂!(正在解析RouteInitializerFn)”我也在1.5.1上。没有更改任何代码,依赖项与升级dart之前的版本完全相同。从pubspec.yaml“修复”它:transformers:-angular使用@Injectable()注释类修复了在dart-1.5下使用transformer时的问题。这太棒了,谢谢!