Vue Prop属性功能与用法实例详解

2020-06-13 10:36:49易采站长站整理

因为显式定义的 prop 适用于向一个子组件传入信息,然而组件库的作者并不总能预见组件会被用于怎样的场景。这也是为什么组件可以接受任意的特性,而这些特性会被添加到这个组件的根元素上。

例如,想象一下你通过一个 Bootstrap 插件使用了一个第三方的

<bootstrap-data-input>
组件,这个插件需要在其
<input>
上用到一个 data-date-picker 特性。我们可以将这个特性添加到你的组件实例上:


<bootstrap-date-input data-date-picker="activated"></bootstrap-date-input>

然后这个

data-date-picker="activated"
特性就会自动添加到
<bootstrap-date-input>
的根元素上。

6.1 替换/合并已有的特性

想象一下

<bootstrap-date-input>
的模板是这样的:


<input type="date" class="form-control">

为了给我们的日期选择器插件定制一个主题,我们可能需要像这样添加一个特别的类名:


<bootstrap-date-input
data-date-picker="activated"
class="date-picker-theme-dark"
></bootstrap-date-input>

在这种情况下,我们定义了两个不同的 class 的值:

form-control,这是在组件的模板内设置好的。
date-picker-theme-dark,这是从组件的父级传入的。

对于绝大多数特性来说,从外部提供给组件的值会替换掉组件内部设置好的值。所以如果传入

type="text"
就会替换掉
type="date"
并把它破坏!庆幸的是,class 和 style 特性会稍微智能一些,即两边的值会被合并起来,从而得到最终的值:
form-control
date-picker-theme-dark

6.2 禁用特性继承

如果你不希望组件的根元素继承特性,你可以设置在组件的选项中设置

inheritAttrs: false
。例如:


Vue.component('my-component', {
inheritAttrs: false,
// ...
})

这尤其适合配合实例的

$attrs
属性使用,该属性包含了传递给一个组件的特性名和特性值,例如:


{
class: 'username-input',
placeholder: 'Enter your username'
}

有了