我有一个如下所示的课程
double stringToDouble(const char* str, std::size_t* pos=nullptr)
{
errno=0;
char* end;
const auto x=std::strtod(str, &end);
if(errno==ERANGE)
{
// Ignore it for denormals
if(x!=0 && x>-HUGE_VAL && x<HUGE_VAL)
return x;
throw std::out_of_range("strtod: ERANGE");
}
else if(errno)
throw std::invalid_argument("strtod failed");
if(pos)
*pos=end-str;
return x;
}
HTML视图如下所示
std::istringstream
在这里,html代码块位于内部,并且ngFor循环为export class Story {
id: number;
title: string;
storyText: string;
utcDate: string;
get displayDate(): string {
const today = new Date();
const postDate = new Date(this.utcDate);
const td = today.getTime();
const pd = postDate.getTime();
return ((td-pd)/1000)+'ms';
}
}
,并且story是Story类型,<span>
<i class="fa fa-clock-o" aria-hidden="true"></i>
{{story.displayDate}}
</span>
类型的数组
但是它什么也没显示。也没有错误。我在这里做错了什么?没有显式的setter属性,是否可以像这样工作?还是应该创建一个setter属性并手动设置值?
编辑: 在我的脚本下方,该脚本填充了故事数组和服务功能
*ngFor="let story of stories"
}
stories: Story[];
答案 0 :(得分:1)
除非您创建新实例,否则您的getter方法将无法工作。 同样,当您放置故事时:Story [],您只是在说假设Stories包含Story类中的属性是安全的。 Typescript不会有吸气剂。
由于您位于ngFor内部,因此建议您使用Pipe。
int
然后在模板中进行如下修改。
import { Pipe, PipeTransform } from '@angular/core';
@Pipe({
name: 'displayDate'
})
export class DisplayDatePipe implements PipeTransform {
transform(value: any): string {
const today = new Date();
const postDate = new Date(value);
const td = today.getTime();
const pd = postDate.getTime();
return ((td-pd)/1000).toString();
}
}
答案 1 :(得分:1)
这是因为当您键入Typescript时,没有方法。 想象一下你有这个:
const data = {
id: 1;
title: 'foo';
storyText: 'bar';
utcDate: '01-01-2000';
}
const story = data as Story;
// OR
const story = <Story> data;
console.log( story.displayDate ); // Wrong, because the method doesn't exist
因此,您需要创建一个新对象
const story = new Story(data.id, data.title, data.storyText, data.utcDate);
console.log( story.displayDate ); // Will work !
但这意味着您必须拥有constructor
,并且需要循环播放故事。