$rootScope vs. service - Angular JS



实现$rootScope函数和服务之间的区别是什么?安全性还是性能

我读了这篇文章,所以我很好奇。

我一直在试图弄清楚是否为我的应用程序的某个全局函数最好在服务或$rootScope本身上实现。为了让你们了解我正在做什么,我目前正在开发一个脏表单函数,如果他/她从某个表单中导航出去,它会提示用户。在这种情况下,我决定最好将其实现为全局函数,所以有什么提示吗?

谢谢你的回复,

1月

在这种情况下,我将使用服务来避免具有全局状态。所有新的作用域都是从$rootScope中创建的。新的控制器或任何使用作用域的控制器将具有可用的$rootscope值。例如,如果您定义了$rootScope.validate(),并且在控制器中定义了函数$scope.validate(),因为您忘记了第一个定义,那么肯定会出现问题。

Misko H.对此有一篇文章http://misko.hevery.com/code-reviewers-guide/flaw-brittle-global-state-singletons/

服务是按需实例化的,而$rootScope是在引导过程中创建的,可以在任何需要它们的地方注入。这有利于测试性。

Angular不会实例化服务,除非应用程序直接或间接地请求它们。

(http://docs.angularjs.org/guide/dev_guide.services.creating_services)

正如@egamonal所提到的,服务是共享公共功能的更健壮的方式。服务不仅是按需实例化的,而且它们本质上是单例的,所以一旦一个服务被创建,无论何时被请求,AngularJS都会传递相同的实例。因此,如果某些东西可以在根范围内,它也可以使用服务来实现。

需要注意的是,使用这种全局方法可能会导致内存泄漏。JS类或DOM元素的实例仍然留在内存中,因为你已经从全局函数(在$rootscope或service)引用了它们。

最新更新