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

在Angularjs应用程序中使用$ rootscope的最佳实践?

吕修筠
2023-03-14
问题内容

我们有一个大型Angularjs 1.6应用程序,该应用程序的$
rootscope分散在整个应用程序的过滤器,服务,路由等200多个位置中。因此需要对其进行重构,但是我不确定如何知道何时将其删除。什么时候在应用程序中使用$
rootscope是最佳实践?

我已经阅读了所有内容,从没读过,到用它来存储变量,我都以为是在控制器之间共享数据。从那以后,我读到最好在这种用例中使用工厂/服务,而且我还读到一个有效的用例是将$
rootscope用作全局事件总线。

我真的没有在Angularjs文档中看到这一点。


问题答案:

来自ng-book:

当Angular开始运行并生成视图时,它将创建从ng-app根元素到$ rootScope的绑定。$ rootScope是所有$
scope对象的最终父对象。$
rootScope对象是我们在Angular应用程序中最接近全局上下文的对象。在此全局上下文中附加太多逻辑是一个坏主意,就像弄脏JavaScript全局范围也不是一个好主意。

没错,您绝对应该使用 服务 在模块之间共享数据和逻辑。

$ rootScope中 放入大量逻辑意味着您的应用程序中的可维护性和模块性很差,测试问题也非常困难。

我强烈建议您看一下:

  • 服务AngularJS文档
  • Thinkster精彩文章,介绍如何在控制器之间共享数据
  • Simpulton截屏

我知道将所有内容附加到 $ rootScope 可能很容易,但是很难进行工作,进行很少的更改,将代码重用于其他应用程序或模块并总体上测试应用程序。

编辑

最近,我不得不从API中获取一些项目并捕获这些项目,以便在特定视图中显示它们。项目的获取机制是确定的Factory,而格式化和显示项目的机制是确定的Controller

因此,我必须在Factory获取商品时发出一个事件,并在中捕获该事件Controller

$ rootScope方式

//Factory
$rootScope.$broadcast('refreshItems', items);
//Controller
$scope.$on('refreshItems', doSomething());

显然可以,但是我真的不喜欢使用它,$rootScope而且我还注意到该任务的执行情况非常糟糕。

然后,我尝试对Postal.js进行尝试:

Postal.js是一种内存消息总线,受AMQP的启发很宽松,它是用JavaScript编写的。Postal.js在浏览器中运行,或在使用node.js的服务器上运行。它采用了熟悉的“事件样式”范例(大多数JavaScript开发人员都熟悉),并通过提供“代理”和订户实现对其进行扩展,这些实现比通常在简单事件发出/聚合中所发现的更为复杂。

我尝试将其Postal.js用于此类需求,但发现它确实比$rootScope用于此目的要快。

//Factory
$scope.$bus.publish({
                  channel : 'reloadItems',
                  topic   : 'reloadItems'
                  data    : items
);

//Controller
$scope.$bus.subscribe({
  channel  : 'reloadItems',
  topic    : 'reloadItems',
  callback : function () {
    resetAndLoadItems();
  }
});

希望对您有所帮助。



 类似资料:
  • 问题内容: 我将开始使用AngularJS进行客户端和Django进行服务器端项目。 使他们像最好的朋友一样工作的最佳实践是什么(静态文件,身份验证,部署等) 问题答案: 有多种方法可以从Django模板中为客户端模板提供支持,以实现有趣的优化。但是,鉴于Django和AngularJS的模板语言之间的相似之处,在这里几乎不值得付出任何努力。对于此类大多数项目,我会将AngularJS的静态服务与

  • 我正在构建一个全栈 Web 应用程序。我正在使用 Vue.js作为前端,Spring启动用于后端,将 PostgreSQL docker 容器用于数据库。但是,我很好奇,一旦我完成了Web应用程序的开发,我应该在哪里以及如何部署它。 我在下面列出了我的问题: < li >我应该在哪里部署我的全栈应用程序,如AWS、GCP、Hiroku或任何其他平台。 < li >部署我的前端、后端和数据库的最佳实

  • 由于有多个实现提供了OAuth2功能,我们目前正在研究几个可用的选项。(例如Keycloak和ORY Hydra)。我们的选择取决于我们要做多少工作,改变应用程序的现有结构,如何处理数据库中的用户。但无论我们选择哪种实现方式,我们都将面临类似的问题。 问题 > react应用程序如何处理登录过程和令牌存储? 这同样适用于刷新令牌流。因为对于我自己的应用程序,我必须设置cookie,对于第三方,这必

  • 所以我有一个Web应用程序,其中前端是用React编写的,后端是用NodeJs/NestJ编写的,并且处于部署应用程序的阶段。我有一个运行Ubuntu的Linode服务器,我最初的想法是安装Docker 那么,这是设置应用程序的好方法吗?这种设置有什么利弊吗?除了因为需要服务器数量而定价之外?或者还有其他更有益的选择吗? 提前致谢。

  • 我不是问这是否可能,我知道这是可能的,但我想知道什么是最好的方式提供一个rest服务,同时在我的应用程序中有一个前端。 我正在开发一个Spring Boot应用程序,我目前有一个调用jsp页面的控制器,还有一个单独的RestController。我希望能够用一个Android应用来消费它。 那么在我的应用程序中同时拥有一个控制器和一个单独的Restcontroller是正确的吗?例如,将从/api

  • 在我的JavaSwing应用程序中,我实现了一个与jms服务器通信的jms客户机。这很好。 当前,当我的应用程序启动时,我创建连接和会话: 接下来,当我需要向主题发送消息时,我创建了一个主题(发送消息)、一个临时队列(接收回复)、一个生产者(发送消息)和一个消费者(实际读取回复): 我想知道在这种情况下最好的做法是什么? 当我需要发送消息时,我可以简单地创建所有内容吗?或者最好将目标、消息生产者、