【问题标题】:Configuring AngularDart Modules配置 AngularDart 模块
【发布时间】:2013-11-11 18:26:13
【问题描述】:

我正在尝试添加一个 HttpInterceptor。在 AngularJS 我会写这样的东西:

m.config(["$httpProvider", function($httpProvider) {...}])

但 AngularDart 中似乎没有配置功能。

配置 AngularDart 模块的正确方法是什么?

【问题讨论】:

    标签: dart angular-dart


    【解决方案1】:

    HttpInterceptor 在 AngularDart 中的实现略有不同。

    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

    【讨论】:

    【解决方案2】:

    @pavelgj 的回答并不是完全正确的使用HttpInterceptors 的方法。当引导的 angular-dart 应用程序已经启动了某些 Http 调用时,它可能会引入难以调试的计时错误,因此拦截器会错过这些调用。

    使用拦截器的正确方法是确保在 Angular 应用程序中的某个位置第一次 Http 调用之前注入它。引导的新语法是这样的:

    applicationFactory()
      .addModule(new YourAngularApp())
      .run();
    

    因此,在 YourAngularApp 中,无论您是第一次注入 Http 的任何位置,都可以注入 HttpInterceptor(仅一次)并添加您的自定义拦截器。

    【讨论】:

    • 这是正确答案。我最初使用了选定的答案,但当我尝试将服务注入我的路线时最终遇到了一些时间问题。在设置拦截器之前调用了对我的服务的调用,因为路由在 run() 之后立即初始化。在您的应用程序内部设置拦截器看起来也是一种更简洁的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2015-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    相关资源
    最近更新 更多