如何覆盖 angular 中的现有组件?
How do I overwrite an existing component in angular?
我正在尝试覆盖 angular 中的现有组件。
我原来的组件是:
@Component({
selector: 'app-orginal',
templateUrl: './orginal.component.html',
styleUrls: ['./orginal.component.css']
})
export class OrginalComponent implements OnInit {
}
在app.component.html中我使用了这样的原始组件:
<app-orginal></app-orginal>
您想做的是用模拟组件覆盖原始组件。
这是我的模拟组件:
@Component({
selector: 'app-mock-of-orginal',
templateUrl: './mock-of-orginal.component.html',
styleUrls: ['./mock-of-orginal.component.css']
})
export class MockOfOrginalComponent implements OnInit {
}
与此答案相关 我尝试在我的 app.module.ts 中使用此解决方案:
@NgModule({
declarations: [
AppComponent,
OrginalComponent,
MockOfOrginalComponent
],
imports: [
BrowserModule,
HttpClientModule,
RouterModule.forRoot([
{path: 'app-mock-of-orginal', component: MockOfOrginalComponent},
{path: 'app-orginal', redirectTo: 'app-mock-of-orginal', pathMatch: 'full'},
]),
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {
}
但是没有用。我做错了什么?
这是我的 git-hub 项目:https://github.com/annalen/overwrite-component
感谢您的帮助。
要用替代品替换组件,必须替换原始组件的声明。您的示例是同时声明两个组件,但使用不同的选择器。关键是使用相同的选择器,但只声明一个。
@Component({selector: 'app-original'})
export class MockAppComponent {
// this will replace AppComponent
}
@Component({selector: 'app-original'})
export class AppComponent {
}
// You could use a value from environment.ts
// if you need to toggle this at compile time.
const mockFlag = true;
@NgModule({
declarations: [
mockFlag ? MockAppComponent : AppComponent,
],
imports: [
BrowserModule,
HttpClientModule,
RouterModule.forRoot([]),
],
providers: [],
bootstrap: [mockFlag ? MockAppComponent : AppComponent]
})
export class AppModule {
}
Angular 不允许您声明两个共享同一选择器的组件,但如果您不想更改模板,则必须使用该选择器。
我不确定你为什么要这样做。也许这不是你想要的。
我正在尝试覆盖 angular 中的现有组件。
我原来的组件是:
@Component({
selector: 'app-orginal',
templateUrl: './orginal.component.html',
styleUrls: ['./orginal.component.css']
})
export class OrginalComponent implements OnInit {
}
在app.component.html中我使用了这样的原始组件:
<app-orginal></app-orginal>
您想做的是用模拟组件覆盖原始组件。
这是我的模拟组件:
@Component({
selector: 'app-mock-of-orginal',
templateUrl: './mock-of-orginal.component.html',
styleUrls: ['./mock-of-orginal.component.css']
})
export class MockOfOrginalComponent implements OnInit {
}
与此答案相关
@NgModule({
declarations: [
AppComponent,
OrginalComponent,
MockOfOrginalComponent
],
imports: [
BrowserModule,
HttpClientModule,
RouterModule.forRoot([
{path: 'app-mock-of-orginal', component: MockOfOrginalComponent},
{path: 'app-orginal', redirectTo: 'app-mock-of-orginal', pathMatch: 'full'},
]),
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule {
}
但是没有用。我做错了什么?
这是我的 git-hub 项目:https://github.com/annalen/overwrite-component
感谢您的帮助。
要用替代品替换组件,必须替换原始组件的声明。您的示例是同时声明两个组件,但使用不同的选择器。关键是使用相同的选择器,但只声明一个。
@Component({selector: 'app-original'})
export class MockAppComponent {
// this will replace AppComponent
}
@Component({selector: 'app-original'})
export class AppComponent {
}
// You could use a value from environment.ts
// if you need to toggle this at compile time.
const mockFlag = true;
@NgModule({
declarations: [
mockFlag ? MockAppComponent : AppComponent,
],
imports: [
BrowserModule,
HttpClientModule,
RouterModule.forRoot([]),
],
providers: [],
bootstrap: [mockFlag ? MockAppComponent : AppComponent]
})
export class AppModule {
}
Angular 不允许您声明两个共享同一选择器的组件,但如果您不想更改模板,则必须使用该选择器。
我不确定你为什么要这样做。也许这不是你想要的。