是否可以将提供者注入AngularJs中的服务?

时间:2015-08-20 08:59:19

标签: angularjs

我正在为http查询实现自定义拦截器。它需要访问$ httpProvider中定义的默认标头。

是否可以将$ httpProvider(不是$ http的实例,因为这导致循环引用)作为对拦截器工厂的依赖注入?

2 个答案:

答案 0 :(得分:9)

不,你不能。

提供商是一个对象,它为您返回工厂/服务的功能,并且在>工厂

之前运行

实际上就是这样:

  1. 创建应用
  2. 附加/定义您的服务
  3. 配置步骤(您可以注入常量和提供者)
  4. 运行步骤(您可以注入其他所有内容),最后创建实例,并且您的工厂实例无法更改配置,因为已经完成并且$http已经创建且不可变。
  5. 简而言之:在生成所有实例之前,您只能在引导程序.config()块中注入提供程序。

答案 1 :(得分:1)

您可以注入INPUT_DIR=${1:=.} OUTPUT_DIR=${2:=.} [ -d "$INPUT_DIR" -a -d "$OUTPUT_DIR" ] || { printf "error: invalid directory specified (INPUT_DIR or OUTPUT_DIR)\n" exit 1 } while IFS= read -r file; do base_file=${file##*/} output="$OUTPUT_DIR/${base_file%.*}.woff" ttf2woff "$file" "$output" || exit 1 done < <(find "$INPUT_DIR" -type f -iname "*.ttf")

$injector

然后,在一些.factory("MyInterceptor", ["$injector", function($injector) { return { response /* or any other */: function(response) { var $http = $injector.get("$http"); // here, you have access to $http.defaults.headers, // see https://docs.angularjs.org/api/ng/service/$http#setting-http-headers return response; } }; }]) 块中:

.config()