Привязка Vue переопределяет атрибут элемента

1

У меня есть компонент, который отображает ввод HTML:

<input
    :placeholder="placeholder"
    v-model="value"
    type="text"
    :disabled="disabled"
    :readOnly="readOnly"
    @focus="onFocus"
/>

Обратите внимание, что type не привязан/реактивен.

Когда я помещаю этот компонент в другой и привязываю к нему объект, type становится переопределенным.

 <my-input v-bind="{type: 'foobar'}"></my-input>

Это by design или bug?


Пример (проверьте input[type] в HTML):

const Input = {
    template: '<input type="text"/>'
    //                      ^^^^ "text" gets overriden to "foobar"
}
new Vue({
    el: '#demo',
    components: {
        'my-input': Input
    }
});
<script src="http://vuejs.org/js/vue.min.js"></script>
<div id="demo">
    <my-input v-bind="{type: 'foobar'}"></my-input>
</div>
Теги:
vue.js
vuejs2
vue-component

2 ответа

1

Я ответил на это в вопросе, это ожидается

https://github.com/vuejs/vue/issues/5846#issuecomment-307098682

Вы можете, однако, игнорировать attrs, добавляя их в качестве реквизита и игнорируя их

const Input = {
    props: ['type'],
    template: '<input type="text"/>'
    //                      ^^^^ "text" won't get overriden
}
new Vue({
    el: '#demo',
    components: {
        'my-input': Input
    }
});

Другие атрибуты, такие как class объединяются, но type может быть переопределен

  • 0
    Я думаю, что вы хотели избавиться от комментария? «текст» не перезаписывается
  • 0
    Да, я забыл, чтобы отредактировать комментарий. Сейчас исправлено :) спасибо
0

VueJS добавляет атрибуты компонента к первому дочернему узлу шаблона компонента.

Посмотрите эту скрипку

http://jsfiddle.net/8hzhvrng/

У my-input есть input корневой дочерний элемент, а затем он получает type="password"

В my-input2 есть дочерний корень div который получает type="number"

Ещё вопросы

Сообщество Overcoder
Наверх
Меню