Html 来自客户特定模块的Angular 8 override模板
我正在构建一个系统,在这个系统中,核心应该能够处理不同的客户,并且我希望能够在一个“特定于客户”的模块中延迟加载,该模块覆盖我的不同组件的模板,比如说,我有一个ShowBlog组件,它有Html 来自客户特定模块的Angular 8 override模板,html,angular,typescript,angular8,Html,Angular,Typescript,Angular8,我正在构建一个系统,在这个系统中,核心应该能够处理不同的客户,并且我希望能够在一个“特定于客户”的模块中延迟加载,该模块覆盖我的不同组件的模板,比如说,我有一个ShowBlog组件,它有 <ng-container *ngTemplateOutlet="showblog"></ng-container> <ng-template #showblog> <div>SHOW MY BLOG FROM CORE</div> <
<ng-container *ngTemplateOutlet="showblog"></ng-container>
<ng-template #showblog>
<div>SHOW MY BLOG FROM CORE</div>
</ng-template>
您可以为ShowBlogComponent创建基类,例如showBlogComponentBase.ts。 如果您使用到不同模块的路由,每个模块路由都可以引导您到showBlogComponentBase的特定子代 在每个组件文件中,您可以扩展基类并使用不同的本地TemplateUrlHTML,但其背后有相同的逻辑 因此,您可以: common.module.ts带有导出(或延迟路由)common show blog.component.ts扩展showBlogComponentBase.ts 及
通过导出(或延迟路由)<您的自定义模块>-show blog.component.ts扩展showBlogComponentBase.ts我相信您可以控制在当前路由器出口中显示哪个模块 显示博客组件将更改为:-
<show-blog>
<div>SHOW MY BLOG FROM CORE</div>
<show-blog>
<show-blog>
<div>SHOW MY BLOG FROM MyCustomer</div>
<show-blog>
假设选择器为:-“显示博客”
<ng-template #showblog>
<ng-content><ng-content>
</ng-template>
核心博客将更改为:-
<show-blog>
<div>SHOW MY BLOG FROM CORE</div>
<show-blog>
<show-blog>
<div>SHOW MY BLOG FROM MyCustomer</div>
<show-blog>
从CORE显示我的博客
来自客户的博客将更改为:-
<show-blog>
<div>SHOW MY BLOG FROM CORE</div>
<show-blog>
<show-blog>
<div>SHOW MY BLOG FROM MyCustomer</div>
<show-blog>
从MyCustomer显示我的博客
在一个组件中为不同的客户维护不同的模板在以后的时间点将很难维护。不仅如此,您还将代码捆绑到为其他客户编写的不同用例中
我们有一个称为角度内容投影的概念,它实际上是一种延迟加载技术。通过使用内容投影,客户机的消费者可以控制组件应该使用的模板
一篇关于内容投影及其工作原理的深入文章
安格尔大学:
说到您的问题,您应该使用
语法作为占位符,您可以在其中将一个客户端的模板更改为另一个客户端
组件的使用应该传递给您应该使用的模板
例如:
@Component({
selector: 'input-component',
template: `
<ng-content></ng-content>
`,
styleUrls: []
})
export class InputComponent {
}
**Customer Consumer:**
<input-component icon="envelope" _nghost-c0="">
<div>SHOW MY BLOG FROM MyCustomer</div>
</input-component>
**Core Consumer**
<input-component icon="envelope" _nghost-c0="">
<div>SHOW MY BLOG FROM Core </div>
</input-component>
@组件({
选择器:“输入组件”,
模板:`
`,
样式URL:[]
})
导出类InputComponent{
}
**客户消费者:**
从MyCustomer显示我的博客
**核心消费者**
从Core显示我的博客
谢谢你的回答,如果我添加了一条不在基本系统路由中的新路由,这是可行的,但如果我使用基本系统路由,它将不起作用,因为我有两条路由用于相同的url,然后它使用第一条路由,这是来自核心系统的路由。我想为了使路由器正常工作,你应该选择不同的路由。这是关于路由的问题,不是关于组件组合的问题。要做到这一点,是的,但我需要的是一种为特定客户管理组件中html数据的“覆盖”的方法。我怀疑,在一个角度组件树中,不需要两个单独的组件就可以做到这一点。据我所知,模板和逻辑作为角度引导模块声明预编译在一起。模板是路由中列出的组件的模板,还是从tempalte(例如
)实例化的组件的模板?两者都有,一些在路由中,另一些作为模板。每个客户有一个模块吗?以下是我们目前使用的方法。你所说的客户模块到底是什么意思?它是一个预先构建的模块,还是某种特定于客户的CMS数据?客户如何定义此类模块,或者更确切地说是模板?此“模块”是否与特定路由器关联,如/customer1、/customer2?