我正在try 为一个Angular 项目构建"实用"服务(类).实用程序类具有静态函数(因此我们不必实例化不必要的对象).一个例子是:
import { Injectable } from '@angular/core';
@Injectable()
export class DateService {
constructor() {
}
public static parseDate(dateString: string): Date {
if (dateString) {
return new Date(dateString);
} else {
return null;
}
}
}
在我的组件类文件中,我然后像这样导入它:
import { DateService } from '../utilities/date.service';
在类代码中,如下所示:
ngOnInit():void {
let temp = DateService.parseDate("2012/07/30");
console.log(temp); // Mon Jul 30 2012 00:00:00 GMT-0500 (Central Daylight Time)
}
但是,我希望能够在angular html模板中使用这些实用程序函数,如下所示:
<label for="date">Date</label>
<input type="date" class="form-control" id="date" required
[value]="event.date | date: 'yyyy-MM-dd'" (input)="event.date=DateService.parseDate($event.target.value)" name="date">
不幸的是,这不起作用;出现"无法读取未定义的属性'parseDate'错误".
现在,我可以将"parseDate"函数移到Component类中,这可以很好地工作(当然,需要对模板进行必要的更改)……然而,如果我有一堆组件,它们都需要有自己的"parseDate"函数,我想我们都知道这不是一个伸缩性很好的坏主意.(请忽略parseDate函数的琐碎性质)
此外,即使我真的不想仅仅为了运行静态函数而实例化一个对象,但我还是try 使用实际的依赖注入.将其添加到providers数组,并在构造函数中构建一个实例,如下所示:
constructor(private _dateService: DateService) { }
然后将我的模板更改为:
label for="date">Date</label>
<input type="date" class="form-control" id="date" required
[value]="event.date | date: 'yyyy-MM-dd'" (input)="event.date=_dateService.parseDate($event.target.value)" name="date">
这也失败了,这一次出现了"self.context.\u dateService.parseDate不是函数"错误.从函数中删除"static"修复了这个问题,我可以继续,但我仍然需要实例化一些东西来运行一个静态函数.当然还有更好的办法.
有什么 idea 吗?