我的理解是,$rootScope是某种全局变量,它允许在控制器之间共享它。工厂也可以做同样的事情。那么,为什么不换个工厂呢?什么时候应该使用$rootScope,什么时候应该使用工厂,因为它们的用途几乎相同?
发布于 2015-12-25 10:43:53
AngularJS常见问题已经很好地回答了这个问题,这里
$rootScope存在,但它可以用于邪恶的 以角的形式形成层次结构的范围,典型地从树梢的根作用域继承。通常可以忽略这一点,因为大多数视图都有自己的控制器,因此也有自己的作用域。 偶尔会有一些数据,你想要使整个应用程序的全局。对于这些,您可以像任何其他作用域一样注入$rootScope并在其上设置值。由于作用域继承自根作用域,这些值将可用于附加到指令(如ng-show )的表达式中,就像本地$scope上的值一样。 当然,全局状态很糟糕,您应该谨慎地使用$rootScope,就像在任何语言中使用全局变量一样(希望如此)。特别是,不要将其用于代码,只用于数据。如果您想在$rootScope上添加一个函数,那么最好将它放在一个可以在需要时注入的服务中,并且更容易测试。 相反,不要创建一个服务,它的唯一目的是存储和返回一些数据。
发布于 2015-12-25 10:41:24
提供$rootScope是为了查看应用程序中作用域的层次结构。如果您有一个任务要直接修改层次结构(这是非常罕见的:例如手动修复由第三方库或某些全局事件发射器引起的内存泄漏),那么使用$rootScope。
在其他99%的情况下,应该使用服务。
另一种观点可以找到这里。
发布于 2015-12-25 10:41:39
如果您想要存储一些数据并在路由更改(工厂)之后保存它,那么最好的解决方案是服务(工厂)。$rootScope可以做同样的事情,但正如您提到的,它是全局的,所以有机会破坏数据。当您需要一些全局事件(例如,用户登录/注销)时,$rootScope是有用的,但对于数据存储则不有用。
https://stackoverflow.com/questions/34461900
复制相似问题