什么'将一些有用的js库封装到angular模块是一种很好的做法
What's the good practice to wrap some useful js libraries to angular modules?
我想在angularjs中使用一些有用的库,例如jquery、下划线、undercore.string.
直接在角度代码(比如控制器、指令)中使用它们可能不是一个好主意,因为很难模拟和测试。所以我想把它们包装成角度模块:
angularUndercore.js
define(['angular', 'underscore'], function(ng, _) {
return ng.module('3rd-libraries')
.service('underscoreService', function() {
return _;
});
});
我的问题是:
- 使用
.service()
来定义service
好吗?还是工厂或工厂更好 - 使用
underscoreService
好吗,还是仅仅使用underscore
就足够更好了
我认为这实际上是一个范围问题
尽管有些人会不同意,但我认为将_underscore作为每个测试套件的依赖项加载是可以的。原因是我的经验法则说,任何"静态"操作,也就是说,任何使用的非应用程序逻辑或数据敏感的通用算法,都应该单独测试(或者在类似underscope的框架中根本不测试)。
这使测试更易于编写,更具可读性和可维护性,并且将罕见的情况放在一边,如果_underscore在排序数组时出现新错误,这些测试可能无论如何都会失败。此外,我看不出你从这些算法的DI中受益(除了我之前提到的嘲笑)。
然而,如果一个算法更复杂,并且涉及数据逻辑依赖性,我肯定会引入一个工厂(或服务,两者都是单件),只是为了封装这个逻辑并使其本身可测试。至于服务与工厂(与供应商),可能有很多答案,我个人很喜欢:这个
相关文章:
- 我如何才能让CasperJS和PhantomJS在约塞米蒂玩得很好
- 在Javascript中使用全局变量作为缓存是很好的
- 我在下拉列表中尝试了下一个和前五年的html代码.接下来的5年我都过得很好.我怎样才能拿到之前的5年
- JavaScript中的OOP太令人困惑了,ES6很棒,但没有得到很好的支持,该怎么办
- "此网站似乎使用滚动链接定位效果.这可能不能很好地与异步平移一起工作;
- html5:一个很好的加载方法
- mootools 1.4.2和angular 1.3在ie8中配合得很好
- Javascript是一个很好的日期选择器和时间选择器库
- 使用JavaScript验证用户交互/输入-这是一种很好的方法
- unbind().click(function(){..})是一种很好的做法
- Chrome,Safari在从本地存储读取时挂起,而Firefox很好
- JQuery在Chrome中不起作用,但Firefox很好
- 这是一个很好的例子,显示了 JavaScript 中的 OOP 和过程编程之间的区别
- Javascript表排序工作得很好,但对所有索引进行迭代会得到不同的结果
- 以这种方式使用if/else-if/else是一种很好的做法
- 一个很好的JS库,用于容纳电气原理图
- webpack:在MacOS上很好,在linux上加载程序错误
- 我很奇怪“异步”模块不能很好地工作
- 什么'将一些有用的js库封装到angular模块是一种很好的做法
- 什么是一个很好的搜索压缩半径API或Node.js模块为世界