我可以在Angular template中使用带方括号属性访问的安全运算符吗?

我可以在Angular template中使用带方括号属性访问的安全运算符吗?,angular,angular9,Angular,Angular9,在typescript中,我可以这样做“可选链接”(从3.7.0开始): const cell=col.selector?行数据[列字段]?[列选择器]:行数据[列字段]; 如果我尝试在角度模板中使用safe操作符执行类似操作,它会抛出一个编译器错误,就像我误用了三元操作符一样 {{col.selector?行数据[col.field]?[col.selector]:行数据[col.field]} 错误: 分析器错误:条件表达式列选择器?rowData[col.field]?[col.sel

在typescript中,我可以这样做“可选链接”(从3.7.0开始):

const cell=col.selector?行数据[列字段]?[列选择器]:行数据[列字段];
如果我尝试在角度模板中使用safe操作符执行类似操作,它会抛出一个编译器错误,就像我误用了三元操作符一样

{{col.selector?行数据[col.field]?[col.selector]:行数据[col.field]}
错误:

分析器错误:条件表达式列选择器?rowData[col.field]?[col.selector]:rowData[col.field]需要表达式末尾的所有3个表达式[{{col.selector?rowData[col.field]?[col.selector]:rowData[col.field]}]


在我的Angular模板中是否有其他语法可以提供与typescript片段类似的结果?最后一种方法是在typescript中编写一个非常简单的helper函数,返回第一个代码段中的“cell”值,但我更希望能将其保留在模板中。

模板表达式的可用量是有限的


Angular文档提到无法在模板表达式()中使用可选的链接运算符

不能使用具有或升级端的JavaScript表达式 影响,包括:

赋值(,+=,-=,…)运算符,如new、typeof、, instanceof等链接表达式与;或者,增量和 减量运算符++和--一些ES2015+运算符和其他运算符 与JavaScript语法的显著区别包括:

不支持按位运算符,如|和&New template 表达式运算符,如|、?。还有


也许不是更漂亮的语法,但这可能有效:

<div>{{ rowData[col.field] ? (col.selector ? rowData[col.field][col.selector] : rowData[col.field]) : null  }}</div>
{{rowData[col.field]?(col.selector?rowData[col.field][col.selector]:rowData[col.field]):null}
因此,首先检查是否定义了
rowData[col.field]
。如果是,用你的代码片段(用括号括起来)进行处理;由于
rowData[col.field]
已经被选中,并且应该定义它,因此无需使用安全操作符再次检查它,因此我们可以将
rowData[col.field]?[col.selector]
更改为
rowData[col.field][col selector]


如果您想要一个更简洁的语法,就像您知道如何使用helper函数来实现这一点一样,您可以将该函数带到管道,并将要访问的属性作为参数传递。

如何读取html中的
rowData
&
col
?请提供代码片段。“Angular文档提到您无法在模板表达式中使用可选的链接运算符”-我不确定是否同意您的看法。它说不能链接表达式,但这与typescript的“可选链接”(Angular称之为“安全运算符”)不同。也许我的问题的措辞有误导性。虽然我同意这并不完全是最干净的,但它确实有效,并按要求回答了问题。我想我应该在这个函数和一个helper函数之间进行选择,不过如果他们考虑在将来的版本中添加这个语法,那就太好了。