【问题标题】:Angular 2 dynamic templatesAngular 2 动态模板
【发布时间】:2016-09-08 11:36:56
【问题描述】:

我正在开发类似 CMS 的东西。我有带有模板的文章。文章是在后端添加的,我需要使用模板显示它们(当我渲染文章时,我知道要使用哪个模板)。由于会有 10 个模板,我试图找出存储模板的最佳方式以及如何根据加载的文章加载正确的模板。 我在考虑什么:

  • 在后端存储有关模板的元数据并在需要时构建模板
  • 在应用程序中存储模板(创建新模板时需要构建应用程序)
  • 在后端存储原始模板
  • 每个模板都有一个组件并动态加载它们(开销太大)

我正在寻找一种架构和技术解决方案。我很想选择选项 1,但不知道如何为文章组件构建模板。 我希望只有一个组件,它可以获取文章并加载(构建)所需的模板。

Angular2 RC5

编辑:

模板A:设置A的css规则(蓝色文本,标题大写),标题,段落,图像,段落和其他地方的链接(段落内) 模板B:css规则集B(红色文字,常规标题),标题,图片轮播,一段

{
"templateId": 1,
"title": "Article title",
"elements": [{
    "text": "paragraph text"
}, {
    "image": "http: //someurl.com"
}, {
    "text": "another paragraph text"
}]

}

【问题讨论】:

  • 一般来说,Angular2 希望模板与应用程序的其余部分一起编译和部署。模板会有不同的布局吗?还是会有行为差异? IMO 一个带有 ngSwitch 语句的单个组件,可以在其中一个文章模板之间交换是你最好的选择。
  • 我为模板添加了一些示例。甚至可以基于我应该在模板中添加的元素数组来构建模板。我考虑过 ngSwitch 或 ngIf,我只是认为它会随着时间变得过于复杂。
  • 我不确定您通过“要添加到模板中的元素数组”来问什么。但我会在这里发布我认为您的最佳选择的答案。

标签: angular


【解决方案1】:

我认为你最好的选择是为每种样式设置一个组件,其中一个父组件使用 ngSwitch 在文章之间进行交换。所以...

<article-component>
  <div ngSwitch="article.type">
    <template-a *ngSwitchCase="a" [article]="article">
    </template-a>
    <template-b *ngSwitchCase="b" [article]="article">
    </template-b>
    <template-c *ngSwitchCase="c" [article]="article">
    </template-c>
  </div>
</article-component>

除此之外,如果不知道“文章”数据模型是什么样的,我不确定您还能做什么。

编辑: 好的,在看到您提出的数据模型之后,在您的模板中,您可以在 ngFor 中执行 ngSwitch 来迭代您的“元素”数组。我知道这有点笨拙,但这可能是您最好的选择。然后obv共享“段落”、“图片”和“轮播”组件,供不同文章模板之间使用。

【讨论】:

  • 这是否意味着我仍然必须为我准备的每个模板都有单独的组件?
  • 基本上是的。您仍然可以在模板中具有一定的灵活性,以减少重复的数量。如果没有看到您的数据模型,我真的无法发表更多评论。如果您不喜欢我的回答,您可以尝试使用 .createComponent() stackoverflow.com/questions/37618222/…
  • 我仍在考虑数据模型,但我将草稿添加到我的问题中。感谢您迄今为止的帮助
猜你喜欢
  • 2015-10-19
  • 2016-02-18
  • 2017-10-18
  • 1970-01-01
  • 2017-02-26
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
相关资源
最近更新 更多