2013-05-02 68 views
9

实现$ rootScope函数和服务之间有什么区别?安全明智或性能明智。我已阅读this,所以我想知道。

我一直在试图弄清楚我的应用程序的某个全局函数是否最好在服务或$ rootScope本身中实现。为了向大家介绍我正在做什么,我正在开发一个肮脏的表单功能,在该功能中,如果用户离开某个表单,它会提示用户。在这种情况下,我决定把它作为一个全局函数来实现,所以有什么提示?

感谢您的答复,

+0

请参阅:http://stackoverflow.com/a/35411623/2893073 – Eddy 2016-09-09 04:17:11

回答

8

在这种情况下,我会去服务,以避免全球性的状态。所有新的作用域都是从$ rootScope创建的。新的控制器或使用范围的人员的值将为$rootscope。例如,如果您定义了$rootScope.validate(),并且在控制器中定义了函数$scope.validate(),因为您忘记了第一个定义,则肯定会出错。

有出自MISKO H.这个http://misko.hevery.com/code-reviewers-guide/flaw-brittle-global-state-singletons/

服务一篇关于需求的instantianted,而引导过程中创建$ rootScope,何地您需要他们可以注射。这对测试性很好。

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

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

3

由于@egamonal提到的服务是分享共同的功能更强大的方式。不仅服务按需实例化,它们本质上是单一的,所以一旦创建了服务,相同的实例就会在需要时由AngularJS传递。因此,如果某些事情可以在root作用域上运行,那么它也可以使用服务来实现。

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

+0

我喜欢rootScope,我不需要混淆承诺。如果我有应用程序的用户,我可以保持在$ rootScope.appUser的下摆,如果$ rootScope.appUser.firstName被更改,我不需要订阅或发布事件,我可以只有Firs名称:{{appUser.firstName}}任何视图。我想念什么? – Toolkit 2015-11-27 08:42:36