Saj*_*ran 51 pipe typescript angular
现在我有一个名为的自定义管道 CurrConvertPipe
import {Pipe, PipeTransform} from '@angular/core';
import {LocalStorageService} from './local-storage';
@Pipe({name: 'currConvert', pure: false})
export class CurrConvertPipe implements PipeTransform {
constructor(private currencyStorage: LocalStorageService) {}
transform(value: number): number {
let inputRate = this.currencyStorage.getCurrencyRate('EUR');
let outputputRate = this.currencyStorage.getCurrencyRate(localStorage.getItem('currency'));
return value / inputRate * outputputRate;
}
}
Run Code Online (Sandbox Code Playgroud)
我需要在两个不同的模块中使用它,
import './rxjs-extensions';
import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { FormsModule } from '@angular/forms';
import { AppRoutingModule } from './app-routing.module';
import { AppComponent } from './app.component';
import { CurrConvertPipe } from './services/currency/currency-pipe';
@NgModule({
imports: [
BrowserModule,
FormsModule,
HttpModule,
AppRoutingModule,
Module1,
Module2
],
declarations: [
AppComponent,
CurrConvertPipe
],
providers: [
],
bootstrap: [AppComponent]
})
export class AppModule { }
Run Code Online (Sandbox Code Playgroud)
当我在Module1和Module2中导入时,它说错误,说它应该在更高级别的模块中声明.
所以我在里面宣布了 Module1
import {Pipe, PipeTransform} from '@angular/core';
import {LocalStorageService} from './local-storage';
@Pipe({name: 'currConvert', pure: false})
export class CurrConvertPipe implements PipeTransform {
constructor(private currencyStorage: LocalStorageService) {}
transform(value: number): number {
let inputRate = this.currencyStorage.getCurrencyRate('EUR');
let outputputRate = this.currencyStorage.getCurrencyRate(localStorage.getItem('currency'));
return value / inputRate * outputputRate;
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我在Module1中使用它时,它会抛出一个错误无法找到管道'currConvert'
cyr*_*r_x 112
在Angular中,共享公共指令,组件,管道等的一种好方法是使用所谓的共享模块.
这些模块声明并导出公共部件,以使它们可用于任何其他模块.
角度文档的基础部分是关于共享模块的非常好的读物.
我们以你的currConvert
-pipe为例.
ApplicationPipesModule
declarations
和exports
数组中NgModule
imports
阵列// application-pipes.module.ts
// other imports
import { CurrConvertPipe } from './{your-path}';
@NgModule({
imports: [
// dep modules
],
declarations: [
CurrConvertPipe
],
exports: [
CurrConvertPipe
]
})
export class ApplicationPipesModule {}
Run Code Online (Sandbox Code Playgroud)
应用pipes.module.ts
ApplicationPipesModule
模块添加到imports
数组中,将创建的模块导入到将要使用管道的模块中// my-module1.module.ts
// other imports
import { ApplicationPipesModule } from './{your-path}';
@NgModule({
imports: [
// other dep modules
ApplicationPipesModule
],
declarations: [],
exports: []
})
export class MyModule1 {}
Run Code Online (Sandbox Code Playgroud)
我-module1.module.ts
// application-pipes.module.ts
// other imports
import { CurrConvertPipe } from './{your-path}';
@NgModule({
imports: [
// dep modules
],
declarations: [
CurrConvertPipe
],
exports: [
CurrConvertPipe
]
})
export class ApplicationPipesModule {}
Run Code Online (Sandbox Code Playgroud)
我-module2.module.ts
编辑:改进答案文本和示例.
小智 9
考虑你有这样的结构:
app
-shared
-components
-DateComponentModule.ts
-pipes
-DatesPipe
-DatesPipeModule.ts
-SharedModule.ts
Run Code Online (Sandbox Code Playgroud)
当您在 DateComponentModule 中使用 DatesPipeModule 时。
在 DatesPipeModule 中声明并导出 DatesPipe
现在将 DatesPipeModule 直接导入到 DateComponentModule 中。
DatesPipeModule.ts
import { DatesPipe} from './{your-path}';
@NgModule({
imports: [],
declarations: [
DatesPipe
],
exports: [
DatesPipe
]
})
export class DatesPipeModule{}
Run Code Online (Sandbox Code Playgroud)
日期组件模块.ts
import { DatesPipeModule} from './{your-path}';
@NgModule({
imports: [DatesPipeModule],
declarations: [],
exports: []
})
export class DateComponentModule{}
Run Code Online (Sandbox Code Playgroud)
您还可以将其导出SharedModule
并导入到DatesComponentModule.ts
,但SharedModule
不会在管道之前加载,因此会引发错误。
小智 6
您可以使用共享模块来共享您的服务,指令,管道,组件
您必须创建一个模块并导入管道,指令,服务或组件,并设置服务的声明,导出和提供程序。
将共享模块导入到所需位置并使用它。
基本上是在NgModules元数据中声明和导出的管道和指令。对于服务,请定义forRoot,它返回提供程序以访问其他模块。
shareModule.ts
import { NgModule, ModuleWithProviders } from '@angular/core';
import { appDirective } from './{your-path}';
import { appPipe } from './{your-path}';
import { appService } from './{your-path}';
@NgModule({
declarations: [
appPipe,
appDirective
],
exports: [
appPipe,
appDirective
]
})
export class SharingModule {
static forRoot(): ModuleWithProviders {
return {
ngModule: SharingModule,
providers: [ appService ]
};
}
}
Run Code Online (Sandbox Code Playgroud)my-module1.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { myComponent } from './{your-path}';
import { SharingModule } from './{your-path}';
@NgModule({
declarations: [
myComponent
],
imports: [
BrowserModule,
SharingModule.forRoot()
],
})
export class AppModule {}
Run Code Online (Sandbox Code Playgroud)同样,您也可以在其他模块中进行操作。
归档时间: |
|
查看次数: |
36509 次 |
最近记录: |