Angular使用根范围与服务共享数据

gh9*_*gh9 5 javascript angularjs

我一直在阅读wrox角书.在本书中,作者描述了一种在控制器之间共享数据的方法

  1. 在根范围上有一个属性
  2. 更新根作用域上的该属性
  3. 广播该属性已更新的事实
  4. 所有需要知道的儿童瞄准镜都会收听广播.

而不是在服务上暴露一个对象,让角度的双向数据绑定完成所有繁重的工作.为什么有人会采用"根范围发布/订阅"方法,而不是在服务上公开对象?

suv*_*roc 6

这是一个有趣的问题.

首先,我们应该考虑各个层面的差异:

  • 范围

    • 如果$rootScope我们在全局范围内定义变量
    • 在共享服务的情况下,我们可以将此服务注入到真正使用此值的控制器
  • 可扩展性

    • $rootScope - 我们有限的选项来添加额外的逻辑来处理这个值(我们可以定义另一个全局函数)
    • 共享服务 - 我们可以自由定义任何类型的逻辑
  • 封装

    • $rootScope - $ rootScope中定义的所有对象都将在所有模块中可见
    • 共享服务 - 我们可以决定什么是可见的,什么是不可见的
  • 模块化

    • $rootScope - 全局变量不在模块空间中
    • 共享服务 - 服务是一个单独的应用程序模块
  • 维护

    • $rootScope- 很难找到哪些组件使用我们的$rootScope变量.
    • 共享服务 - 我们可以看到我们使用哪些服务,我们可以找到使用此服务的组件
  • 捆绑

    • $rootScope - 很容易在一个变量中的几个控制器中设置双向绑定 $rootScope
    • 共享服务 - 启用双向绑定可能很棘手

在我看来,这只对真正的全局变量有用.