angular1.X上的问题

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

阅读 1.9k
1 个回答

首先要明白,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阶段时,工厂对象都配置完成了,才能按照依赖注入的语法将相应的服务实例注入进来

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进