当前位置: 首页 > 面试题库 >

AngularJS使用$ rootScope作为数据存储

梁丘璞瑜
2023-03-14
问题内容

我对AngularJS应用有个主意,我很好奇AngularJS社区是否认为可以这样做。简而言之,我正在连接到数据API并将结果显示在页面上。

我创建了一个AngularJS服务,该服务在上创建了一个数据存储$rootScope.DataStore。我还有一个服务方法,可以使用从API端点返回的数据更新DataStore。如果我使用来从控制器内部请求
products”
API端点DataStore.update('products'),则它将$rootScope.DataStore.products使用我的产品数据进行更新。

现在,在视图/部分视图中,我要做的就是ng-repeat="product in DataStore.products"显示数据,而与我所处的控制器范围无关。因此,从本质上讲,我的DataStore是我唯一的真理来源。

我从这种方法中获得的好处是易于理解语义并减少了控制器编码。因此,无论何时更新DataStore,绑定到DataStore的任何内容也会被更新。

这会给$rootScope摘要周期增加过多的负担,还是这样做很奇怪?还是这是一种很棒的方式?:)欢迎任何评论。


问题答案:

在以下引用的AngularJS
FAQ中
解决了这个问题:

有时,有些数据要对整个应用程序进行全局处理。对于这些,您 可以 像其他作用域一样 注入$ rootScope
并在其上设置值。由于作用域是从根作用域继承而来的,因此这些值将可用于附加到ng-show之类的指令的表达式,就像本地$ scope上的值一样。

似乎团队确实鼓励使用$rootScope这种方式,但要注意以下几点:

当然,全局状态很糟糕,您应该谨慎使用$ rootScope,就像(希望)使用任何语言的全局变量一样。特别是,不要将其用于代码,而仅用于数据。如果您想在$
rootScope上放置一个函数,最好总是将其放在可以在需要的地方注入并且更容易测试的服务中。

相反,请勿创建仅在生命中唯一目的是存储和返回数据位的服务。

这不会给$digest周期带来太大的负担(它实现了基本的脏检查以测试数据突变),而且这并不是一种奇怪的处理方式。

编辑:
有关性能的更多详细信息,请参见Misko(AngularJS开发人员)的关于SO的答案:数据绑定在AngularJS中如何工作? 特别注意有关性能的部分。



 类似资料:
  • 问题内容: 试图找到AngularJS的一些基本信息,但是AngularJS文档并没有太大帮助。简单地说,我们为什么要使用它? 同样,在约翰·帕帕(John Papa)的Hot Towel模板中,通用模块中有一个自定义函数: 我不明白这是怎么回事。因此,这是几个基本问​​题: 1)怎么办? 2)和之间有什么区别? 问题答案: 怎么办? 正在通过应用程序范围发送事件。该应用程序的任何子级范围都可以使

  • 问题内容: 我在AngularJS .run下有以下代码,该代码在我的本地开发计算机上可以正常运行,但在上传到客户端服务器后将无法工作…经过几次测试,很明显,在加载控制器时,事件并未尚未触发,因此取决于此事件的控制器中的大多数功能均无法正常工作。有人可以告诉我我在做什么错以及如何解决吗?谢谢 问题答案: 你总是要有一个比赛条件。我可以选择几种替代方法: 1)使用服务。我并不是这个选项的忠实支持者,

  • 问题内容: 我有一个内存中的数据源: 但是现在我被卡住了。我想将其用作J2SE应用程序中的JPA数据源。我已经搜索了整个网络,但是所有信息都与J2EE有关。 问题答案: / 在这里输入什么? / 好吧,什么都没有。在Java SE环境中,您必须使用来自JPA提供程序的内置连接池,并且设置如下所示:

  • 问题内容: 我想对2个单独的HTML元素使用控制器,并使用$ rootScope在编辑一个列表时使2个列表保持同步: HTML JS 页面加载时,和均显示数据库中正确的内容,但是当我使用该方法时,仅更新。 有没有更好的方法来组织我的逻辑,或者我可以做一些事情,以确保在获取的同时更新? 这是类似的示例:http : //plnkr.co/edit/2a55gq 问题答案: 我建议使用包含菜单及其方法

  • 问题内容: 我是AngularJs的新手,所以这可能微不足道。是否有内置的AngularJ 来检测表单中未保存的数据。如果没有,那么如何去写一个。任何指针将不胜感激。 html代码是 我的角度js控制器代码是 我正在尝试编写指令以检测未保存的数据,并且我猜想它会写在上述控制器中。 问题答案: AngularJS设置CSS类和任何输入栏你已经使用在NG- 模型,您的FormController拥有的

  • 问题内容: 我需要使用php创建一个具有大量数据的mysql数据库的解决方案。我的程序将有许多要求,我认为如果我使用缓存和OO数据库,我会得到很好的结果,但是我没有经验。 我认为,例如,如果我将保存在mysql中的信息缓存到redis数据库中,性能将会提高,但是我不知道这是否是个好主意,因此我希望有人来帮助我选择。 抱歉,如果我的英语不太好,我来自巴西。 问题答案: 是的,redis对此很有帮助。