在 Vue 中传递 props 时什么时候使用引号、括号或什么都不用?

Kok*_*oko 6 vue.js

我正在构建一个 Vue 模板,并将 props 传递给组件。我发现决定何时需要括号、引号或不需要括号,将变量向下传递到组件中有点令人困惑。我见过这三个符号:

<status-view v-bind:total=total></status-view>

<status-view v-bind:total="total"></status-view>

<status-view v-bind:total="{total}"></status-view>
Run Code Online (Sandbox Code Playgroud)

这些类型的符号之间究竟有什么区别?

tha*_*ksd 6

您的前两个示例将<status-view>组件的totalprop绑定到total当前模板范围上下文中的值。

您的最后一个示例是将<status-view>组件的totalprop绑定到{total}当前模板范围上下文中的值。

在这种情况下,{total}ECMAScript2015对象初始化简写{ total: total }(具有键的对象total与一个值等于所述值total属性)。

为了更容易推理,让我们调用 component <child>,组件的 propfoo和我们正在绑定的属性bar


带引号:

<child v-bind:foo="bar"></child>

  • bar当前范围内的属性值绑定到孩子的fooprop

  • 引号内的任何内容都将被评估为 javascript 表达式。因此v-bind:foo="bar + 1"(给定barequals 1)会将值绑定2到孩子的foo道具。

  • 我建议始终以这种方式将属性值绑定到子组件的 prop


没有引号:

<child v-bind:foo=bar></child>

  • 还将bar当前范围内的属性值绑定到子项的fooprop

  • 正如 Roy J 指出的,属性引号在 HTLM5 中是可选的。因此,这将与上述评估完全相同。为了保持一致性,我仍然会使用引号。


作为对象:

<child v-bind:foo="{bar}"></child>

  • 将一个对象绑定{ bar: bar }到孩子的foo道具上

  • 对于instace,如果bar等于'test',孩子的foo道具会{ bar: 'test' }


这是v-bind.

  • [属性引号在 HTML5 中是可选的](/sf/ask/454671731/) (2认同)