Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 如何将服务注入RouteInitializerFn(新路由DSL)_Dart_Angular Dart - Fatal编程技术网

Dart 如何将服务注入RouteInitializerFn(新路由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.

我正在将我的应用程序切换到新的路由DSL。具体地说,我想用
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时的问题。这太棒了,谢谢!