鉴于您展示的示例,我建议使用选项 2。这确实不是“在 Aurelia 上更容易”,但更明确的是您将该属性的值绑定到列出的属性。
下面是原始答案
第一个选项的好处是,例如,当您拥有一个接受多个值但作为单个字符串的属性时。最常见的例子是class 属性。 class 属性接受以空格分隔的列表中的多个类:
<div class="foo bar baz"></div>
想象一下,我们只想根据我们的 VM someProp 上的一个道具从这个列表中添加或删除类 baz,同时保留其他类。要使用.bind 语法执行此操作,我们必须在我们的VM 上创建一个属性,该属性具有完整列表,但添加或删除baz,由someProp 的值确定。但是使用字符串插值绑定,这变得简单多了:
<div class="foo bar ${someProp ? 'baz' : ''}"></div>
您可以想象如何通过添加或删除多个类来扩展它。您也许可以使用.bind 语法创建一个值转换器来执行此操作,但它最终可能会产生一些不那么可读的内容。
我可以想象正在创建的值转换器在使用中可能看起来像这样:
<div class.bind="someProp | toggleClass:'baz':'foo':bar'"></div>
我真的认为这比使用字符串插值语法可读性差很多。
顺便说一下,我上面想象的值转换器是这样的:
export class ToggleClassValueConverter {
toView(value, toggledClass, ...otherProps) {
return `${otherProps.join(' ')} ${value ? toggledClass : ''}`;
}
}
最好的部分是我仍然在值转换器中使用字符串插值:-)