gpt4 book ai didi

javascript - 具有多个组件渲染的动态加载器组件

转载 作者:行者123 更新时间:2023-12-05 05:37:11 24 4
gpt4 key购买 nike

我正在寻找一种解决方案来动态呈现我的 Angular 应用程序中的某些组件。所以我觉得最好的方法是调查https://angular.io/guide/dynamic-component-loader但这并不是我要找的。

只是一些上下文,假设您的应用程序允许您的用户根据他们的个人资料/资格查看优惠。我的应用程序将执行一些请求,最后您可以认为我们能够构建一些方法,例如

isEligibleToFirstOffer() : boolean
isEligibleToSecondOffer() : boolean
isEligibleToThirdOffer() : boolean

每个报价都非常具体并且具有不同的业务逻辑,我们不能只创建一个带有输入的通用组件,我想在他自己的组件中将每个报价分开,以尽可能多地按报价类型隔离逻辑。

我想要实现的是构建一个OffersWrapper将组件类数组作为输入并将其呈现在主容器中的组件。

这个数组将使用之前的逻辑构建,类似于:

const componentsToRender = [
...(isEligibleToFirstOffer() ? [FirstOfferComponent] : []),
...(isEligibleToSecondOffer() ? [SecondOfferComponent] : []),
...(isEligibleToThirdOffer() ? [ThirdOfferComponent] : [])
]

现在的问题是,将此数组提供给通用组件并使它们动态呈现的最佳方法是什么?

我们还可以改进一点 componentsToRender也能够注入(inject)数据,但这不是这个问题的主要问题,无论如何,为想要查看此解决方案的 future 开发人员提供完整答案可能会很有趣。

const componentsToRender: {component: any, data: any}[]

最后,解决方案将使我们能够编写这种代码:

<html>
<body>
<main>
<component-wrapper [components]=componentsToRender></component-wrapper>
<router-outlet></router-outlet>
</main>
</body>
</html>

谢谢!

最佳答案

从这个问题来看,您似乎有一组组件,并且您知道要渲染什么以及预先针对什么情况。

如果是这样,那就没有那么多动态了。您可以将所有内容封装在一个组件中。该组件将决定渲染什么以及何时渲染。如果需要,可以创建额外的服务来卸载组件的决策逻辑。

可以很简单

@Component({
template: `
<component-a *ngIf="condition1"></component-a>
<component-b *ngIf="condition2"></component-b>
<component-c *ngIf="condition3"></component-c>
`
})
export class Component {
condition1: boolean;
condition2: boolean;
condition3: boolean;

ngOnInit() {
this.service.getData().subscribe(res => {
// set the conditions here
});
}
}

如果您需要以队列方式显示报价,那么您可以在 ngOnInit 中创建此队列。

例如

@Component({
template: `
<component-a *ngIf="queue[0] === 'component-a'" (close)="queue.shift()"></component-a>
<component-b *ngIf="queue[0] === 'component-b'" (close)="queue.shift()"></component-b>
<component-c *ngIf="queue[0] === 'component-c'" (close)="queue.shift()"></component-c>
`
})
export class Component {
queue = []; // ['component-a', 'component-b'] for example

ngOnInit() {
this.service.getData().subscribe(res => {
// set the queue here
});
}
}

关于javascript - 具有多个组件渲染的动态加载器组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73170183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com