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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.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 如果通过HTML(结合bind toValue)实例化,则onCatchError不会出现_Dart_Angular Dart - Fatal编程技术网

Dart 如果通过HTML(结合bind toValue)实例化,则onCatchError不会出现

Dart 如果通过HTML(结合bind toValue)实例化,则onCatchError不会出现,dart,angular-dart,Dart,Angular Dart,我对AngularDart/DI如何实例化新对象有点困惑 如果我通过HTML实例化“appcontroller”,它永远不会得到catchError(它在控制台中失败,出现“uncaughterror…”)。奇怪的是——只有当我bind(Proxy,toValue:newproxy())时才会发生这种情况如果我绑定(代理)它工作 另一种使其工作的方法是使代理中的完成符为静态。然后bind(SyncProxy,toValue:newsyncproxy())没有问题,并且会出现错误 如果我在单元测试

我对AngularDart/DI如何实例化新对象有点困惑

如果我通过HTML实例化“appcontroller”,它永远不会得到catchError(它在控制台中失败,出现“uncaughterror…”)。奇怪的是——只有当我
bind(Proxy,toValue:newproxy())时才会发生这种情况如果我
绑定(代理)它工作

另一种使其工作的方法是使代理中的完成符为静态。
然后
bind(SyncProxy,toValue:newsyncproxy())没有问题,并且会出现错误

如果我在单元测试中运行控制器、代理和模块,它也可以工作

@angular.Controller(选择器:“[appcontroller]”,发布为:“ctrl”)
类控制器{
最终记录器_Logger=新记录器(“集成.测试.角度.控制器”);
最终委托书;
bool _loadedwerstror=false;
控制器(此代理){
_proxy.load().catchError((最终字符串错误){
_logger.severy(“错误X:$Error”);
_loadedWithError=true;
});
}
}
@角度的。可注射的()
类代理{
最终完成者_Completer=新完成者();
未来负荷(){
//_完成者。完成者错误(“错误”);
新计时器(新持续时间(秒:1),(){
_完成者。完成者错误(“错误”);
});
返回_completer.future;
}
} 
类SampleModule扩展了angular.Module{
SampleModule(){
绑定(控制器);
//适用于单元测试,但HTML实例化失败
绑定(Proxy,toValue:newproxy());
}
}
main(){
applicationFactory().addModule(新的SampleModule()).run();
}
HTML代码:


...
[更新]
根据下面Günters的回答和我自己的测试,方法是
bind(Proxy,toValue:newproxy())创建一个单例是无用的,而且会适得其反


正常的
绑定就足够了,可以避免区域问题

不同之处在于,使用
toValue:
执行
new SampleModule()
时将创建实例,而使用
bind(Proxy)
时,将在通过Angular从喷油器请求
控制器
实例时创建实例。我想这与区域有关。似乎DI在另一个区域运行。在第二种情况下,两个实例都在同一个区域中创建(由DI创建);在第一种情况下,代理在默认区域中创建,控制器在区域DI中工作。您为什么需要
新代理()
?如果您需要自定义实例化,您可以使用
toFactory
.uhh-一如既往地感谢您的回答。我想它一定有不同范围的事情要做,比如。。。无论什么我不知道这些区域。“newproxy()”生成一个单例。在真正的应用程序中,代理是一个SyncProxy,而这个SyncProxy对于整个应用程序必须只有一个实例。我不完全确定这是如何工作的,但有人多次解释说DI总是只创建一个实例。如果您再次在子注入器上注册它,它将在那里创建另一个实例,但除此之外,如果您仅在AppModule中注册它,则无论您如何注册,整个应用程序中都应该只有一个实例。Ohh man。。。直到现在我还以为它和Guice的工作原理一样。退出几个单元测试后,我发现在Dart中创建多个实例比在Java中要困难得多。正如您已经说过的,在Dart中,如果您没有指定任何特殊的内容,DI只会为每个类创建一个实例。实际上,创建第二个实例需要两个模块,两个带有toValue或toImplementation的bind语句!这或多或少与我的预期完全相反:-哦,要点:几个月前我有过同样的经历;-)
<body appcontroller>
...