有人可以给我提供一个示例,说明如何在 TypeScript 中创建使用依赖注入的 Angular 过滤器。底部是我目前拥有的,工作正常,但我想做的是我想要访问 $filter 的函数,以便我可以将 return date.ToString() 行更改为 $filter '日期'。这样我就可以使用内置的日期过滤器来显示一个友好的简短日期。
class FriendlyDateFilter {
public static Factory() {
return function (input): string {
if (angular.isDate(input)) {
var date: Date = input;
var today = new Date();
var days = Math.abs(getDaysBetweenDates(today, date));
if (days < 7) {
var dayInWeek = date.getDay();
switch (dayInWeek) {
case 0:
return "Sunday";
break;
case 1:
return "Monday";
break;
case 2:
return "Tuesday";
break;
case 3:
return "Wednesday";
break;
case 4:
return "Thursday";
break;
case 5:
return "Friday";
break;
case 6:
return "Saturday";
break;
}
} else {
return date.toString();
}
} else {
return input;
}
}
function getDaysBetweenDates(d0, d1) {
var msPerDay = 8.64e7;
// Copy dates so don't mess them up
var x0: any = new Date(d0);
var x1: any = new Date(d1);
// Set to noon - avoid DST errors
x0.setHours(12, 0, 0);
x1.setHours(12, 0, 0);
// Round to remove daylight saving errors
return Math.round((x1 - x0) / msPerDay);
}
}
}
}
angular.module("ReadingLog").filter("FriendlyDateFilter", FriendlyDateFilter.Factory);
首先,您需要使用angular.d.ts定义文件.
然后,您只需执行以下操作:
MyFilter.$inject = ["$log"];
function MyFilter ($log: ng.ILogService): Function {
return function(msg: string) {
$log.log("I'm injected!");
return msg;
};
}
angular.module("testModule").filter("MyFilter", MyFilter);
$inject
财产可在Function
感谢这些行angular.d.ts
:
// Support for painless dependency injection
interface Function {
$inject?: string[];
}
See https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/angularjs/angular.d.ts#L12
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)