Angular 找不到角度2管道

Angular 找不到角度2管道,angular,angular2-pipe,Angular,Angular2 Pipe,我按照此链接创建了自己的time ago管道: 但当我注射并使用它时,我看到了错误: 模板分析错误:找不到管道“timeAgo” 下面是我的代码,请帮我解决这个问题,非常感谢 很久以前了 import { Pipe, ChangeDetectorRef } from '@angular/core'; import { AsyncPipe } from '@angular/common'; import { Observable } from 'rxjs/Observable'; import

我按照此链接创建了自己的time ago管道:

但当我注射并使用它时,我看到了错误:

模板分析错误:找不到管道“timeAgo”

下面是我的代码,请帮我解决这个问题,非常感谢

很久以前了

import { Pipe, ChangeDetectorRef } from '@angular/core';
import { AsyncPipe } from '@angular/common';
import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/interval';
import 'rxjs/add/operator/startWith';

@Pipe({
    name: 'timeAgo',
    pure: false
})
export class TimeAgoPipe extends AsyncPipe {
    value: Date;
    timer: Observable<string>;

    constructor(private ref: ChangeDetectorRef){
        super(ref);
    }

    transform(obj: any, args?: any[]): any {
        if(obj instanceof Date) {
            this.value = obj;

            if(!this.timer) {
                this.timer = this.getObservable();
            }
            return this.timer;
        }
        return this.transform(obj, args);

    }

    private getObservable(){
      const INTERVAL = 1000 * 45;

      const ONE_MINUTE = 60;
      const ONE_HOUR = 60 * 60;
      const ONE_DAY = 60 * 60 * 24;
      const ONE_MONTH = 60 * 60 * 24 * 30;
      const ONE_YEAR = 60 * 60 * 24 * 30 * 12;

      return Observable.interval(INTERVAL).startWith(0).map(() => {
        // current time
        let now = Date.now();

        // time since message was sent in seconds
        let delta = (now - this.value.getTime()) / 1000;

        // format string
        if(delta < ONE_MINUTE) {
          return 'just now';        
        }
        if(delta < ONE_HOUR) {
          return Math.floor(delta / ONE_MINUTE) + 'min(s) ago';
        }
        if(delta < ONE_DAY) {
          return Math.floor(delta / ONE_HOUR) + 'hour(s) ago';
        }
        if(delta < ONE_MONTH) {
          return Math.floor(delta / ONE_DAY) + 'day(s) ago';
        }
        if(delta < ONE_YEAR) {
          return Math.floor(delta / ONE_MONTH) + 'month ago';
        }

      });
    }
}
post.component.html

<ul *ngIf="posts">
  <li *ngFor="let post of posts">
    {{ post.created_at | timeAgo}}     
  </li>
</ul>


{{post.created_at | timeAgo}}



似乎
平台管道正在被弃用()

您可以使用本文提供的方法设置全局管道:


这是因为您的
TimeAgoPipe
继承自
AsyncPipe
。我不知道Angular2 beta构建期间的行为,但Angular2.2.x在模板编译期间始终无法找到继承的
@Component
@Pipe
@Directive

Angular2不支持组件继承似乎有一些很好的理由:


如果您正在寻找与Angular 2.2兼容的
TimeAgoPipe
,请查看我的或直接查看。

即使我添加了MomentModule作为全局导入,我还是将

import { MomentModule } from 'angular2-moment';
我把动量模块放在这里

...
imports: [
    ...,
    MomentModule,
    ...,
]
在相应的*.module.ts下,在您的情况下,它将是post.component.module.ts

如以下链接所示


您是否在post.component.ts中导入了类似这样的管道-从“/timeAgo.pipe”导入{TimeAgoPipe};我全局使用该管道,以便将其导入main.ts。我假设扩展其他类的管道仍然中断。请确保将管道添加到main.ts中的声明中
import { MomentModule } from 'angular2-moment';
...
imports: [
    ...,
    MomentModule,
    ...,
]