0

我正在将我的应用程序分解为模块,但我在使用管道时遇到了一些问题,我有一些管道需要在整个应用程序中使用。

我尝试制作自己的管道模块,但这似乎并没有像我预期的那样工作。

这就是我所做的。

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';

import {GetCountPipe} from "./get-count.pipe";
import {TruncateWordsPipe, TruncateCharactersPipe} from "./truncate.pipe";
import {FilterStatusPipe} from "./filter-status.pipe";

@NgModule({
  imports: [
    CommonModule,
  ],
  declarations: [
    GetCountPipe,
    TruncateCharactersPipe,
    TruncateWordsPipe,
    FilterStatusPipe
  ],
  exports: [
    GetCountPipe,
    TruncateCharactersPipe,
    TruncateWordsPipe,
    FilterStatusPipe
  ]
})
export class UpPipesModule { }

我希望能够将它导入我的GlobalsModule,这样我只需要导入一次,然后在我导入GlobalsModule的任何地方我也可以访问所有管道UpPipesModule

GlobalModules错误:简单地说,当我添加到要导入它的模块时,我的管道似乎没有被加载。因此我得到以下错误。

fs.js:106 ERROR Error: Uncaught (in promise): TypeError: Cannot read property 'length' of undefined
TypeError: Cannot read property 'length' of undefined
    at TruncateCharactersPipe.webpackJsonp.888.TruncateCharactersPipe.transform (truncate.pipe.ts:13)

至于我想要发生什么。我希望我的管道加载到可以包含在我的单个模块中,GlobalModule然后我可以将其导入到我的应用程序子模块中,每个子模块都代表应用程序的一部分。

导致错误的管道:

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'truncate'
})
export class TruncateCharactersPipe implements PipeTransform {
  transform(value: string, limit: number = 40, trail: String = '…'): string {
    if (limit < 0) {
      limit *= -1;
      return value.length > limit ? trail + value.substring(value.length - limit, value.length) : value;
    } else {
      return value.length > limit ? value.substring(0, limit) + trail : value;
    }
  }
}

@Pipe({
  name: 'words'
})
export class TruncateWordsPipe implements PipeTransform {
  transform(value: string, limit: number = 40, trail: String = '…'): string {
    let result = value;

    if (value) {
      let words = value.split(/\s+/);
      if (words.length > Math.abs(limit)) {
        if (limit < 0) {
          limit *= -1;
          result = trail + words.slice(words.length - limit, words.length).join(' ');
        } else {
          result = words.slice(0, limit).join(' ') + trail;
        }
      }
    }

    return result;
  }
}
4

0 回答 0