Angular使用根作用域(root scope)与服务(services)来共享数据。

27 浏览
0 Comments

Angular使用根作用域(root scope)与服务(services)来共享数据。

我一直在阅读《wrox angular book》。书中作者描述了一种在控制器之间共享数据的方法:

  1. 在根作用域上有一个属性
  2. 更新根作用域上的属性
  3. 广播属性已更新的事实
  4. 需要知道的所有子作用域都会监听广播。

而不是在服务上公开对象并让Angular的双向数据绑定来处理所有的繁重工作。为什么有人会选择“根作用域发布/订阅”方法,而不是在服务上公开对象?

0
0 Comments

Angular中使用rootScope和服务来共享数据的原因是,当一个控制器A改变服务S中的数据时,控制器B无法直接通过理解S中的数据已经改变来改变其作用域值。有人必须告诉控制器B,S中的数据已经改变,并根据这个改变更新其作用域。这可以通过两种方式来实现。

一种是rootScope广播:服务S广播变化,控制器B监听这个广播。

另一种是$scope.$watch:在控制器B中,作用域必须监视服务数据的变化。

那么通过引用传递呢?`ctrl.data = srv.data`。如果使用`angular.copy`来保持引用活动,每当更新服务上的数据时,所有控制器将与该服务数据保持同步。

解决方法可以是使用rootScope广播或者使用$scope.$watch来监听服务数据的变化。另外,可以通过引用传递来实现控制器之间的数据共享。

0
0 Comments

Angular中使用根作用域和服务来共享数据的问题,产生原因是因为在不同的层面上存在一些区别。关于这些区别,我们可以考虑以下几个方面:

  • 作用域

    • 对于$rootScope,我们在全局作用域中定义变量
    • 对于共享服务,我们可以将该服务注入到真正使用该值的控制器中
  • 可扩展性

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

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

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

    • $rootScope - 很难找到哪些组件使用了我们的$rootScope变量
    • 共享服务 - 我们可以看到我们使用了哪些服务,可以找到在哪个组件中使用了这个服务
  • 绑定

    • $rootScope - 在$rootScope中的多个控制器上设置双向绑定很容易
    • 共享服务 - 启用双向绑定可能会有些棘手

我认为这只对于创建真正的全局变量很有用。

0
0 Comments

在Angular中,有两种常见的方法可以在不同的组件之间共享数据:使用根作用域($rootScope)和使用服务(services)。

使用根作用域的原因是,根作用域是Angular中最高级别的作用域,可以在整个应用程序中访问。这意味着任何在根作用域中定义的数据都可以在任何组件中使用。然而,使用根作用域来共享数据存在一些问题。首先,使用根作用域共享数据可能会导致命名冲突和代码混乱。此外,根作用域是全局的,可能会导致数据在不同组件之间意外地被修改。

为了解决这些问题,可以使用服务来共享数据。服务是一种可注入的对象,可以在应用程序的不同组件中共享。通过将数据存储在服务中,可以保持数据的一致性和封装性,并且可以避免使用全局作用域。使用服务来共享数据可以提高代码的可维护性和可扩展性。

使用根作用域和使用服务来共享数据在Angular中是两种常见的方法。根据数据的类型和应用程序的需求,选择适合的方法可以帮助我们更好地组织和管理数据。

0