缩小后,具有typescript的角度筛选器无法工作
Angular filter with typescript is not working after minification
我用typescript写了一个角度过滤器,它在缩小源代码之前一直很好。
这是过滤器:
module App.Test {
export interface IGroupingFilter extends ng.IFilterService {
(name:"grouping-filter"): (collection:any[]) => collection:any[];
}
class GroupingFilter {
static $inject:string[] = ["underscore"];
static ConvertDateTime(item:any):number {
var time = "" + item.time;
var newTime = (time.length == 3) ? "0" + time : time;
return +(item.pickupDate.replace(/'-/g, '') + newTime);
}
public static Factory(underscore:UnderscoreStatic) {
return underscore.memoize((collection:any[]) => {
var groupKey = "id";
var group:any = underscore.groupBy(collection, (item:any) => {
return item[groupKey];
});
var grpArray = [];
angular.forEach(group, (item) => {
grpArray.push({
"groupKey": item[0][groupKey],
"items": item
});
});
var grpArraySorted = underscore.sortBy(grpArray, (grpObj:any) => {
var min:any = underscore.min(grpObj.items, (item:any) => {
return GroupingFilter.ConvertDateTime(item);
});
return GroupingFilter.ConvertDateTime(min);
});
return grpArraySorted;
});
}
}
angular.module("app").filter("groupingFilter", GroupingFilter.Factory);
}
这是缩小版:
var App;
!function (t) {
var e;
!function (t) {
var e = function () {
function t() {
}
return t.ConvertDateTime = function (t) {
var e = "" + t.time, r = 3 == e.length ? "0" + e : e;
return +(t.pickupDate.replace(/'-/g, "") + r)
}, t.Factory = function (e) {
return e.memoize(function (r) {
var n = "id", i = e.groupBy(r, function (t) {
return t[n]
}), o = [];
angular.forEach(i, function (t) {
o.push({groupKey: t[0][n], items: t})
});
var a = e.sortBy(o, function (r) {
var n = e.min(r.items, function (e) {
return t.ConvertDateTime(e)
});
return t.ConvertDateTime(n)
});
return a
})
}, t.$inject = ["underscore"], t
}();
angular.module("app").filter("groupingFilter", e.Factory)
}(e = t.Test || (t.Test = {}))
}(App || (App = {}));
这是角度错误消息
错误:[$injector:unp]未知提供程序:eProvider<-e<-分组过滤器过滤器
非常感谢
缩小时它不起作用的原因是将"underscore"
注入FooFilter
类,而不是实际的筛选器,这是FooFilter.Factory
的结果。要创建这样一个简单的过滤器,您实际上并不需要类,只需传递一个简单函数即可。
angular.module('app').filter('fooFilter', fooFilter);
fooFilter.$inject = ['underscore'];
function fooFilter(underscore) {
return underscore.memoize((collection:any[]) => {
return underscore.shuffle(collection);
});
}
如果你真的想把过滤器工厂函数写成一个静态类方法,你可以使用这样的数组语法:
angular.module("app")
.filter("groupingFilter", ['underscore', GroupingFilter.Factory]);
在这种情况下,请从类中删除$inject
数组。
相关文章:
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 表筛选器不工作
- orderBy筛选器只能工作一次
- 数据插件选项筛选器不工作
- Rally自定义应用程序复选框筛选器不工作
- 筛选器操作后,工具提示停止工作
- 筛选第二次选择不工作
- mongodb筛选器不工作
- 缩小后,具有typescript的角度筛选器无法工作
- Marionette CollectionView筛选器不工作
- 在筛选表之前显示/隐藏图像是't工作
- is('checked')筛选方法工作不正常
- 列筛选器不能与行分组一起工作
- 在REST服务中使用ContainerResponse筛选器时,GET正在工作,但POST不工作