Angular / Typescript Class Getter属性不起作用

时间:2018-07-06 06:32:31

标签: angular typescript getter

我有一个如下所示的课程

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[];

2 个答案:

答案 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,并且需要循环播放故事。