我需要一个可以在整个 Angular 应用程序中全局访问的对象,并且我很乐意将这个对象放入价值服务中。
不幸的是,这个对象是由另一个服务计算的,我无法注入myService
到同一个value
服务中。
ATM,我已经通过以下方式实现了我的目标:
全球服务代码
app.service('myService', function() {
this.foo = function() {
// some code that returns an object
return computedObject
}
})
app.run(function ($rootScope, myService) {
$rootScope.global = {dbObject: myService.foo()}
})
我可以通过简单地注入它在任何让我满意的控制器中使用$rootScope
它
但是,我不喜欢在$rootScope
需要那个该死的对象的任何地方注入整个控制器,而且我相信它也不太安全(或高效?),因为团队指定
当然,全局状态很糟糕,您应该谨慎使用 $rootScope,就像(希望)在任何语言中使用全局变量一样。特别是,不要将其用于代码,仅用于数据。如果您想在 $rootScope 上放置一个函数,最好将它放在一个可以在需要的地方注入并且更容易测试的服务中。
相反,不要创建一个生活中唯一目的是存储和返回数据位的服务。
您是否碰巧知道我可以将服务注入服务价值的任何方式?
或者我可以利用的任何其他 Angular 最佳实践?
我忘记了一个非常重要的通知
对象的计算可能是相当密集的计算,所以我绝对不希望每次我从一个页面移动到另一个页面时都重新计算它,或者其他任何东西。