Angular2:用于路由的共享组件
Angular2: Shared component thats used for routing
我正在使用一个组件在 2 个单独的模块中进行路由。 Angular 抛出关于 2 个声明的错误。我怎样才能分享这个?
共享组件的典型指南展示了如何共享但不在模块中用于路由。
我想在 2 个单独的模块中使用 ProductComponent,但该组件用于路由,因此典型的共享组件策略不起作用。
路由:
EXAMPLE1.module.ts
`
...
import { ProductComponent } from '../../product/product.component';
export const routes:Routes = [
{ path: 'products/:product-slug', component: ProductComponent },
other example 1 routes
];
@NgModule({
imports: [
CommonModule,
...
],
declarations: [
ProductComponent,
other example 1 components
],
providers: [
...
]
})
export class EXAMPLE1 { }
`
EXAMPLE2.module.ts
`
...
import { ProductComponent } from '../../product/product.component';
export const routes:Routes = [
{ path: 'different/:product-slug', component: ProductComponent },
other example 2 routes
];
@NgModule({
imports: [
CommonModule,
...
],
declarations: [
ProductComponent,
other example 2 components
],
providers: [
...
]
})
export class EXAMPLE1 { }
`
产品组件由这 2 个模块共享
有什么想法吗?
您可以像这样
在 shared.module.ts 中导出该组件
declarations: [ ProductComponent,
...
]
exports: [ ProductComponent],
之后您可以在 2 个模块中导入您的共享模块
imports:[
SharedModule,
]
所以在你的 app.routing.ts 中你可以导入它并且你不再需要在模块中声明它,在你的两个路由文件中导入你的组件,就像这样
import { ProductComponent } from '../shared/product.component.ts'
您不能在两个模块中声明一个组件。
您要么在一个模块中声明它,然后导出它并在另一个模块中使用它。或者您创建一个新的共享模块,并将在两者之间共享。
@NgModule({
declarations: [
ProductComponent
],
exports: [ProductComponent]
})
export class EXAMPLE1 { }
@NgModule({
imports: [
EXAMPLE1
]
})
export class EXAMPLE2 { }
现在您可以使用第一个组件了,我想没问题!
为此你会做一个共享模块,比如
@NgModule({
declarations: [ ProductComponent ],
exports:[ ProductsComponent ]
})
export class SharedProductModule{}
然后在两个模块中导入该模块
@NgModule({
imports: [ SharedProductModule ]
})
exports class ExampleModule {}
多亏了 Fateh Mohamed,我才开始工作
...
import { SharedModule } from '../../shared/shared.module'; <-- for declerations
import { ProductComponent } from '../../product/product.component'; <-- for routing
export const routes:Routes = [
{ path: 'products/:product-slug', component: ProductComponent },
other example 1 routes
];
@NgModule({
imports: [
CommonModule,
SharedModule <----- add shared module
...
],
declarations: [
other example 1 components <-- remove declaration of component
],
providers: [
...
]
})
export class EXAMPLE1 { }
我正在使用一个组件在 2 个单独的模块中进行路由。 Angular 抛出关于 2 个声明的错误。我怎样才能分享这个?
共享组件的典型指南展示了如何共享但不在模块中用于路由。
我想在 2 个单独的模块中使用 ProductComponent,但该组件用于路由,因此典型的共享组件策略不起作用。
路由:
EXAMPLE1.module.ts
`
...
import { ProductComponent } from '../../product/product.component';
export const routes:Routes = [
{ path: 'products/:product-slug', component: ProductComponent },
other example 1 routes
];
@NgModule({
imports: [
CommonModule,
...
],
declarations: [
ProductComponent,
other example 1 components
],
providers: [
...
]
})
export class EXAMPLE1 { }
`
EXAMPLE2.module.ts
`
...
import { ProductComponent } from '../../product/product.component';
export const routes:Routes = [
{ path: 'different/:product-slug', component: ProductComponent },
other example 2 routes
];
@NgModule({
imports: [
CommonModule,
...
],
declarations: [
ProductComponent,
other example 2 components
],
providers: [
...
]
})
export class EXAMPLE1 { }
`
产品组件由这 2 个模块共享
有什么想法吗?
您可以像这样
在 shared.module.ts 中导出该组件declarations: [ ProductComponent,
...
]
exports: [ ProductComponent],
之后您可以在 2 个模块中导入您的共享模块
imports:[
SharedModule,
]
所以在你的 app.routing.ts 中你可以导入它并且你不再需要在模块中声明它,在你的两个路由文件中导入你的组件,就像这样
import { ProductComponent } from '../shared/product.component.ts'
您不能在两个模块中声明一个组件。
您要么在一个模块中声明它,然后导出它并在另一个模块中使用它。或者您创建一个新的共享模块,并将在两者之间共享。
@NgModule({
declarations: [
ProductComponent
],
exports: [ProductComponent]
})
export class EXAMPLE1 { }
@NgModule({
imports: [
EXAMPLE1
]
})
export class EXAMPLE2 { }
现在您可以使用第一个组件了,我想没问题!
为此你会做一个共享模块,比如
@NgModule({
declarations: [ ProductComponent ],
exports:[ ProductsComponent ]
})
export class SharedProductModule{}
然后在两个模块中导入该模块
@NgModule({
imports: [ SharedProductModule ]
})
exports class ExampleModule {}
多亏了 Fateh Mohamed,我才开始工作
...
import { SharedModule } from '../../shared/shared.module'; <-- for declerations
import { ProductComponent } from '../../product/product.component'; <-- for routing
export const routes:Routes = [
{ path: 'products/:product-slug', component: ProductComponent },
other example 1 routes
];
@NgModule({
imports: [
CommonModule,
SharedModule <----- add shared module
...
],
declarations: [
other example 1 components <-- remove declaration of component
],
providers: [
...
]
})
export class EXAMPLE1 { }