0


为什么这么写老是报$http没有注入,而换成factory就好用,求指点

1 个回答

0

已采纳

首先要明白,provider和factory的区别是,前者是ng中依赖注入服务实例的提供者,是用来构造factory或者service,而后者则是属于provider的语法糖形式而已,本质还是provider。
一般factory的声明形式为

module.factory(name, $getFunction(){...})

等价于

module.provider(name, {
   $get: $getFunction(){...}
})

所以举一反三咯,如果在factory中声明依赖注入的$http写法是

module.factory(name, [$http, $getFunction($http){...}])

那么provider就应该是

module.provider(name, {
   $get: [$http, $getFunction($http){...}]
})

如果硬要说明原理的话,应该是,provider是在ng初始化阶段,也就是module.config函数进行时运行的,这时候的服务工厂对象都处于配置状态,所以无法通过依赖注入来提供服务实例(因为服务都在初始化中),只有到module.run阶段时,工厂对象都配置完成了,才能按照依赖注入的语法将相应的服务实例注入进来