控制器和服务之间的内部差异是什么?

时间:2015-07-30 13:07:38

标签: angularjs

我刚注意到一位朋友在服务中使用var vm = this;。由于这违反了我们试图应用的样式指南,我开始考虑我们的代码正常运行的重要性。突然间,我注意到控制器和服务/工厂之间可能没有太多差异(从现在开始服务)。

是的,控制器可以访问$scope,但是就像服务一样,它们只是在编译过程中某个时刻创建的对象的构造函数。

是的,控制器的用途与服务完全不同。我知道关注和可重用性的分离。我想知道作为具有半年Angular / JavaScript经验的新手,Angular以何种方式对待服务和控制器的方式不同?更具体地说,控制器可以做什么服务不能做什么,反之亦然(除了范围访问)?

1 个答案:

答案 0 :(得分:3)

基本上,控制器和服务都是JavaScript函数。主要区别在于Angular框架的其余部分如何使用这些函数。

Controllers

  

在Angular中,Controller由JavaScript 构造函数定义,用于扩充Angular Scope

     

当Controller通过ng-controller指令附加到DOM时,Angular将使用指定的Controller 构造函数实例化一个新的Controller对象。将创建一个新的子范围,并将其作为$ scope的构造函数的可注入参数提供。

Services

  

Angular服务是使用dependency injection (DI)连接在一起的可替代对象。您可以使用服务在整个应用中组织和共享代码。

     

Angular服务是:

     
      
  • Lazily实例化 - Angular仅在应用程序组件依赖它时实例化服务。

  •   
  • 单身人士 - 依赖于服务的每个组件都会获得对服务工厂生成的单个实例的引用。

  •   

基于此,您可以看到控制器不是单例,因为服务是,并且不能以服务的方式注入其他Angular组件。