一尘不染

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

angularjs

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

  1. 在根范围上具有属性
  2. 在根范围上更新该属性
  3. 广播属性已更新的事实
  4. 所有需要了解的儿童范围,都会收听广播。

与在Service上公开对象和让angular的两种方式进行数据绑定做所有繁重的工作相反。为什么有人会采用“根范围发布/订阅”方法,而不是在服务上公开对象?


阅读 291

收藏
2020-07-04

共1个答案

一尘不染

这是一个有趣的问题。

首先,我们应该考虑各个级别的差异:

  • 范围

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

    • $rootScope -我们具有有限的选项来添加其他逻辑以对该值进行操作(我们可以定义另一个全局函数)

    • 共享服务-我们可以自由定义任何类型的逻辑
    • 封装形式

    • $rootScope -$ rootScope中定义的所有对象将在所有模块中可见

    • 共享服务-我们可以决定什么是可见的,什么不是
    • 模块化

    • $rootScope -全局变量不在模块空间中

    • 共享服务-服务是应用程序的单独模块
    • 保养中

    • $rootScope-很难找到哪些组件使用了我们的$rootScope变量。

    • 共享服务-我们可以看到我们使用的服务,也可以找到我们使用该服务的组件
    • 捆绑

    • $rootScope -在多个控制器中的一个变量中设置双向绑定很容易 $rootScope

    • 共享服务-启用双向绑定可能很棘手

在我看来,这仅对创建真正的全局变量有用。

2020-07-04