如何在angular中创建utils库
How to create a utils library in angular
我对Angular很陌生。很抱歉有这个基本问题,但我找不到关于如何以正确的方式在Angular中编写库的信息。
原因是得益于Angular模块以及可测试性/模拟。
图书馆
我正在将我的代码转移到Angular,但我的大部分代码都是基于我几个月来开发的库编写的。想象一下类似下划线的内容。
所以我最初的想法是把它包在一个有角度的模块里,比如:
angular.module('mylib', [])
.factory('map', map)
.factory('reduce', reduce)
.factory('find', find);
function map (...
每个工厂功能都是可测试的。然后像这样使用:
angular.module('app', ['mylib'])
.controller('MainCtrl', ['$scope', 'map', MainCtrl]);
function MainCtrl($scope, map) {
... do stuff with map ...
我想这对几个函数来说是可以的,但我的库有20多个函数,把它们中的每一个定义为工厂,然后把它们注入到我的控制器中,这太麻烦了。
第二个解决方案
另一种方法是只有一个返回对象的工厂。有点像这样:
angular.module('mylib', [])
.factory('mylib', mylib)
function mylib () {
var exports = {};
exports.map = function (...
exports.reduce = function (...
exports.find = function (...
return exports;
}
然后像这样使用:
angular.module('app', ['mylib'])
.controller('MainCtrl', ['$scope', 'mylib', MainCtrl]);
function MainCtrl($scope, mylib) {
... do stuff with mylib.map ...
但是
这是一个好方法吗?用Angular编写实用程序库并使用它的好方法是什么?可读性和可维护性很重要,但我不希望有那么多样板代码。
如果你的库函数和你的例子一样通用,我一开始就不会把它们定义为Angular模块。编写一个简单的JS库。这将减少无用的样板,而且作为奖励,你的库也可以在非Angular应用程序中使用。Angular与不知道它的库配合得很好,例如,不需要数据对象实现任何额外的东西(比如ko.observable
、Backbone Model
等)即可用于数据绑定。
作为一个Angular模块并不是可测试性的要求。我唯一能想到的Angular可以在通用实用程序库中改进可测试性的是依赖项注入(例如,将"当前时间"的模拟服务注入到时间库中以获得确定性结果)。如果你不需要这些,就考虑一下最不复杂的过去,只需编写一个简单的JS库。
如果将库包装在Angular模块中是一个绝对的要求(例如,不要用一个短的名称空间污染全局名称空间),我仍然会用纯JS编写库,将其放入一个更复杂的名称空间,然后用Angular模块将其别名。
lib/handy-utilities-1.0.js
// Or any other descriptive namespace
var handyUtilities = {
map: function() { ... }
};
app/util.js
angular.module("handyUtilities", []).constant("util", handyUtilities);
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 为effect Composer创建GodRays效果过程
- 从javascript创建一个列表
- onkeyup无法动态创建多个文本区域
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何访问声音管理器2创建的声音对象
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- Kendo:我该如何在树视图中创建一个递归的hieiarchy
- 使用Facebook live API创建实时视频对象时的隐私设置
- 在动态创建的元素上获取对特定选择器的引用
- 如何创建带有插槽的vue js组件预加载程序
- 如何在创建键时引用来自同一对象的键
- 如何创建JSON数组
- 从html创建一个指令,该指令按类名应用函数
- 使用Javascript创建测验页面
- 更改使用Chart.js创建的图表中的轴线颜色
- JavaScript名称空间和对象创建
- JQuery对动态创建的对象进行选择
- 创建带有和不带有JavaScript的Bootstrap下拉菜单
- 如何在angular中创建utils库