我正在尝试添加HttpInterceptor。在AngularJS中,我会写这样的东西:
m.config(["$httpProvider", function($httpProvider) {...}])
但似乎AngularDart中没有配置功能。
配置AngularDart模块的正确方法是什么?
答案 0 :(得分:4)
在AngularDart中,HttpInterceptors的实现略有不同。
main() {
// define your interceptor
var intercept = new HttpInterceptor();
intercept.request = (HttpResponseConfig requestConfig) => /* something */;
intercept.response = (HttpResponse response) => /* something */;
intercept.requestError = (dynamic error) => /* something */;
intercept.responseError = (dynamic error) => /* something */;
// get hold of the HttpInterceptors instance -- there are many ways to do this.
Injector injector = ngBootstrap(/* ... */);
var interceptors = injector.get(HttpInterceptors);
// register/add your interceptor
interceptors.add(intercept)
}
有关API的更多信息:
http://ci.angularjs.org/view/Dart/job/angular.dart-master/javadoc/angular.core.dom/HttpInterceptors.html http://ci.angularjs.org/view/Dart/job/angular.dart-master/javadoc/angular.core.dom/HttpInterceptor.html
答案 1 :(得分:3)
@pavelgj的回答并不是完全正确的使用HttpInterceptor
的方法。它可能会引入难以调试的定时错误,当某些Http调用已经由bootstrapped angular-dart app启动时,因此拦截器会错过这些调用。
使用拦截器的正确方法是确保在角度应用程序内的第一个Http调用之前注入它。 bootstrapping的新语法是:
applicationFactory()
.addModule(new YourAngularApp())
.run();
因此,在YourAngularApp中,无论您何时第一次注入Http
,都可以注入HttpInterceptor
(仅一次)并添加自定义拦截器。