栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

来自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();  }});

希望对您有所帮助。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/636131.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号