首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当工厂可以做同样的事情时,为什么使用$rootScope在控制器之间共享数据呢?

当工厂可以做同样的事情时,为什么使用$rootScope在控制器之间共享数据呢?
EN

Stack Overflow用户
提问于 2015-12-25 10:07:59
回答 3查看 746关注 0票数 4

我的理解是,$rootScope是某种全局变量,它允许在控制器之间共享它。工厂也可以做同样的事情。那么,为什么不换个工厂呢?什么时候应该使用$rootScope,什么时候应该使用工厂,因为它们的用途几乎相同?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-12-25 10:43:53

AngularJS常见问题已经很好地回答了这个问题,这里

$rootScope存在,但它可以用于邪恶的 以角的形式形成层次结构的范围,典型地从树梢的根作用域继承。通常可以忽略这一点,因为大多数视图都有自己的控制器,因此也有自己的作用域。 偶尔会有一些数据,你想要使整个应用程序的全局。对于这些,您可以像任何其他作用域一样注入$rootScope并在其上设置值。由于作用域继承自根作用域,这些值将可用于附加到指令(如ng-show )的表达式中,就像本地$scope上的值一样。 当然,全局状态很糟糕,您应该谨慎地使用$rootScope,就像在任何语言中使用全局变量一样(希望如此)。特别是,不要将其用于代码,只用于数据。如果您想在$rootScope上添加一个函数,那么最好将它放在一个可以在需要时注入的服务中,并且更容易测试。 相反,不要创建一个服务,它的唯一目的是存储和返回一些数据。

票数 4
EN

Stack Overflow用户

发布于 2015-12-25 10:41:24

提供$rootScope是为了查看应用程序中作用域的层次结构。如果您有一个任务要直接修改层次结构(这是非常罕见的:例如手动修复由第三方库或某些全局事件发射器引起的内存泄漏),那么使用$rootScope。

在其他99%的情况下,应该使用服务。

另一种观点可以找到这里

票数 1
EN

Stack Overflow用户

发布于 2015-12-25 10:41:39

如果您想要存储一些数据并在路由更改(工厂)之后保存它,那么最好的解决方案是服务(工厂)。$rootScope可以做同样的事情,但正如您提到的,它是全局的,所以有机会破坏数据。当您需要一些全局事件(例如,用户登录/注销)时,$rootScope是有用的,但对于数据存储则不有用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34461900

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档