3

假设我在组件模板中有这样的代码:

<div *ngIf="user?.name; else dash-template">{{user?.name}}</div>

这在另一个组件模板中:

<div *ngIf="data?.datum; else dash-template">{{data?.datum}}</div>

在这两种情况下,如果没有 data,我想用 ng-template 中包含的模板(dash-template)替换我的 div。现在我可以通过在两个文件中添加 dash-template 来归档它。

破折号模板代码:

<ng-template #dash-template>
  <span>-</span>
</ng-template>

但是,一旦我决定更改 dash-template 的内容,我将需要更改每个文件中 dash-template 内容的每个实例。

我尝试在上层组件(app.component.html)中包含破折号模板,并使用外部 html 文件并将其与 index.html 中的链接标记一起包含: <head> ... <link rel="import" href="dash.template.html" > ... </head>

但在第一种情况下,我什么也没做:没有错误并且显示一个空字符串。在第二种情况下(带有链接标签),它找不到 html 文件。


我的问题是:

有没有办法定义一个可重用的 ng-template,或者更常见的是一个可重用的模板引用变量

这是处理空数据的正确方法吗?

4

2 回答 2

1

我的方法是首先在服务中放置一个标志。从需要显示该模板的每个组件中,检查数据可用性并相应地设置该标志。然后基于该模板创建一个新组件。该组件将是所有其他组件的子组件。根据标志将整个内容置于 *ngIf 条件下。从所有组件中删除“if-else -template”。

于 2018-01-24T10:21:11.820 回答
0

对于这个特定的用例,一种更简单的方法可能是: <div>{{user?.name || '-'}}</div>

于 2019-04-08T09:41:29.003 回答