pipes custom angular angular2-pipe

custom - Angular 2: reutilización de tuberías en varios módulos: error no encontrado o definición duplicada



pipe angular date (1)

Estoy trabajando en la versión final angular 2.

He declarado dos módulos : la aplicación principal y uno para la página de configuración .

El módulo principal está declarando globalmente tuberías. Este módulo también incluye el módulo de configuración .

app.module.ts

@NgModule({ imports: [BrowserModule, HttpModule, routing, FormsModule, SettingsModule], declarations: [AppComponent, JsonStringifyPipe], bootstrap: [AppComponent] }) export class AppModule { }

settings.module.ts

@NgModule({ imports: [CommonModule, HttpModule, FormsModule, routing], declarations: [SettingsComponent], exports: [SettingsComponent], providers: [] }) export class SettingsModule { }

Cuando intento utilizar la tubería en el módulo de configuración, aparece un error que indica que no se pudo encontrar la tubería.

zone.min.js?cb=bdf3d3f:1 Unhandled Promise rejection: Template parse errors: The pipe ''jsonStringify'' could not be found (" <td>{{user.name}}</td> <td>{{user.email}}</td> <td>[ERROR ->]{{user | jsonStringify}}</td> <td>{{ user.registered }}</td> </tr"): ManageSettingsComponent@44:24 ; Zone: <root> ; Task: Promise.then ; Value: Error: Template parse

Si incluyo el tubo en el módulo de configuración, se queja de que los dos módulos tienen el mismo tubo.

zone.min.js?cb=bdf3d3f:1 Error: Error: Type JsonStringifyPipe is part of the declarations of 2 modules: SettingsModule and AppModule! Please consider moving JsonStringifyPipe to a higher module that imports SettingsModule and AppModule. You can also create a new NgModule that exports and includes JsonStringifyPipe then import that NgModule in SettingsModule and AppModule.

json-stringify.pipe.ts

@Pipe({name: ''jsonStringify''}) export class JsonStringifyPipe implements PipeTransform { transform(object) { // Return object as a string return JSON.stringify(object); } }

¿Alguna idea sobre esto?


Si desea utilizar la canalización en un módulo diferente, agregue el módulo donde se declara que la tubería se imports: [...] del módulo donde desea reutilizar la tubería, en lugar de agregarla a las declarations: [] de multiples modulos.

Por ejemplo:

@NgModule({ imports: [], declarations: [JsonStringifyPipe], exports: [JsonStringifyPipe] }) export class JsonStringifyModule { }

@NgModule({ imports: [ BrowserModule, HttpModule, routing, FormsModule, SettingsModule, JsonStringifyModule], declarations: [AppComponent], bootstrap: [AppComponent] }) export class AppModule { }

@NgModule({ imports: [ CommonModule, HttpModule, FormsModule, routing, JsonStringifyModule], declarations: [SettingsComponent], exports: [SettingsComponent], providers: [] }) export class SettingsModule { }