Vue.js имеет встроенную директиву под названием v-for
, которая используется для литерации по списку.
HTML код
<ul id="example-1">
<li v-for="item in items">
{{ item.message }}
</li>
</ul>
Код сценария
var example1 = new Vue({
el: '#example-1',
data: {
items: [
{ message: 'Foo' },
{ message: 'Bar' }
]
}
})
Здесь с помощью директивы v-for
элементы в массиве items
возвращаются как переменные с именем item
. Здесь переменные, возвращаемые этой директивой v-for
, могут быть использованы в HTML DOM. Как мне создать такую пользовательскую директиву, которая возвращает переменную в HTML DOM?
Примечание: я действительно искал исходный код директив v-for
в исходном коде *1018* vuejs, но не смог найти. Пожалуйста, помогите мне получить это, поскольку я очень плохо знаком с vuejs. Спасибо.
Редактировать
Что у меня сейчас есть?
Для ввода «Имя», «Фамилия» и «Адрес» есть 3 одинаковые группы ввода соответственно. Каждое поле ввода имеет свойства label
, state
, disabled
, value
и max
, которые хранятся в массиве inputOptions
.
<!-- HMTL -->
<b-input-group :prepend="inputOptions.firstName.label">
<b-form-input
:state="inputOptions.firstName.state"
v-model="inputOptions.firstName.value"
:disabled="inputOptions.firstName.disabled"
:maxlength="inputOptions.firstName.max"
></b-form-input>
</b-input-group>
<b-input-group :prepend="inputOptions.lastName.label">
<b-form-input
:state="inputOptions.lastName.state"
v-model="inputOptions.lastName.value"
:disabled="inputOptions.lastName.disabled"
:maxlength="inputOptions.lastName.max"
></b-form-input>
</b-input-group>
<b-input-group :prepend="inputOptions.address.label">
<b-form-input
:state="inputOptions.address.state"
v-model="inputOptions.address.value"
:disabled="inputOptions.address.disabled"
:maxlength="inputOptions.address.max"
></b-form-input>
</b-input-group>
// Script
inputOptions: {
firstName: {
label: 'First Name',
state: true,
value: 'Foo',
disabled: true,
max: 45
},
lastName: {
label: 'Last Name',
state: true,
value: 'Bar',
disabled: true,
max: 45
},
address: {
label: 'Address',
state: false,
value: 'Foo, Bar.',
disabled: true,
max: 255
},
}
Что мне нужно было сделать
Для каждого поля группы ввода необходимо указывать имена свойств по одному. Предположим, что я создал директиву vue с именем mydirective
и код упрощен следующим образом.
<!-- HMTL -->
<b-input-group v-mydirective="inputOptions.firstName as myProperty" :prepend="myProperty.label">
<b-form-input
:state="myProperty.state"
v-model="myProperty.value"
:disabled="myProperty.disabled"
:maxlength="myProperty.max"
></b-form-input>
</b-input-group>
<b-input-group v-mydirective="inputOptions.lastName as myProperty" :prepend="myProperty.label">
<b-form-input
:state="myProperty.state"
v-model="myProperty.value"
:disabled="myProperty.disabled"
:maxlength="myProperty.max"
></b-form-input>
</b-input-group>
<b-input-group v-mydirective="inputOptions.address as myProperty" :prepend="myProperty.label">
<b-form-input
:state="myProperty.state"
v-model="myProperty.value"
:disabled="myProperty.disabled"
:maxlength="myProperty.max"
></b-form-input>
</b-input-group>
// Сценарий
inputOptions: {
firstName: {
label: 'First Name',
state: true,
value: 'Foo',
disabled: true,
max: 45
},
lastName: {
label: 'Last Name',
state: true,
value: 'Bar',
disabled: true,
max: 45
},
address: {
label: 'Address',
state: false,
value: 'Foo, Bar.',
disabled: true,
max: 255
},
}