我正在将我的应用程序分解为模块,但我在使用管道时遇到了一些问题,我有一些管道需要在整个应用程序中使用。
我尝试制作自己的管道模块,但这似乎并没有像我预期的那样工作。
这就是我所做的。
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;
}
}