9

实现 $rootScope 函数和服务有什么区别?安全方面或性能方面。

我读过这个,所以我想知道。

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

感谢您的回复,

4

2 回答 2

8

在这种情况下,我会寻求服务以避免拥有全局状态。所有新范围都是从 $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

于 2013-05-02T07:34:44.830 回答
3

正如@egamonal 提到的,服务是共享通用功能的更强大的方式。不仅服务是按需实例化的,它们本质上是单例的,因此一旦创建了服务,AngularJS 就会在请求时传递相同的实例。因此,如果某些东西可以在根范围内进行,那么它也可以使用服务来实现。

使用这种全局方法要记住的一个想法是内存泄漏的可能性。JS 类的实例或可能的 DOM 元素保留在内存中,因为您已经从全局函数(在 $rootscope 或服务中)引用了它们。

于 2013-05-02T10:24:29.913 回答