实现$ rootScope函数和服务有什么区别?安全明智或表现明智。
我已阅读this,所以我在想。
我一直试图弄清楚我的应用程序的某个全局函数是否最好在服务或$ rootScope本身中实现。为了让你们知道我在做什么,我正在开发一个脏表格功能,在这个功能中,如果他/她离开某个表格,它会提示用户。在这种情况下,我决定最好将它作为一个全局函数实现,所以任何提示?
感谢您的回复,
扬
答案 0 :(得分:8)
在这种情况下,我会去寻求服务以避免出现全局状态。所有新范围都是从$ rootScope创建的。新控制器或使用范围的人员将具有$rootscope
值。例如,如果您定义$rootScope.validate()
并在控制器中定义函数$scope.validate()
,因为您忘记了第一个定义,那么肯定会出错。
Misko H.有一篇关于这个http://misko.hevery.com/code-reviewers-guide/flaw-brittle-global-state-singletons/
的文章服务是按需实例化的,而$ rootScope是在bootstrap期间创建的,可以在任何需要的地方注入。这对可测试性有好处。
Angular不会实例化服务,除非应用程序直接或间接请求它们。
(http://docs.angularjs.org/guide/dev_guide.services.creating_services)
答案 1 :(得分:3)
正如@egamonal所提到的,服务是分享常用功能的更强大的方式。不仅按需实例化服务,它们本质上是单例的,因此一旦创建了服务,AngularJS会在需要时传递相同的实例。因此,如果某些内容可以在根范围内进行,则也可以使用服务来实现。
有人认为使用这种全局方法时要记住内存泄漏的可能性。 JS类或DOM元素的实例保留在内存中,因为您已从全局函数中引用它们(在$ rootscope或服务中)。