v-модель с пользовательским компонентом vuejs не работает

#javascript #html #vue.js #v-model

Вопрос:

Я сделал несколько компонентов vuejs, просматривая API vuejs. Когда я тестировал какой-то код, но v-модель не работала с пользовательским компонентом. Это мой код.

Пользовательский ввод.vue

 lt;templategt;  lt;divgt;  lt;input  :value="modelValue"  @input="$emit('update:modelValue', $event.target.value)"  /gt;  lt;/divgt; lt;/templategt;  lt;scriptgt; export default {  props: ["modelValue"], }; lt;/scriptgt;  lt;stylegt;lt;/stylegt; 

Тестовая модель.vue

 lt;templategt;  lt;divgt;  lt;custom-input  :model-value="searchText"  @update:model-value="searchText = $event"  gt;lt;/custom-inputgt;  lt;pgt;{{ searchText }}lt;/pgt;  lt;/divgt; lt;/templategt;  lt;scriptgt; import CustomInput from "./element2/CustomInput.vue";  export default {  data() {  return {  searchText: "",  };  },  components: {  CustomInput,  }, }; lt;/scriptgt;  lt;stylegt;lt;/stylegt; 

И это написано на API vuejs(3.x) вот так. введите описание изображения здесь

введите описание изображения здесь

Но это не сработало при тестировании с тем же кодом, что и API. Поэтому я изменил файл CustomInput.vue следующим образом.

 lt;templategt;  lt;divgt;  lt;input  :value="modelValue"  @input="$emit('update:model-value', $event.target.value)"  /gt;  lt;/divgt; lt;/templategt;  lt;scriptgt; export default {  props: ["modelValue"], }; lt;/scriptgt;  lt;stylegt;lt;/stylegt; 

It worked. But I don’t know why it worked. I want to know why it worked. And on the vuejs API, the above code can be shortened and used. enter image description here

so I tested with that code like this.

TestVueModel.vue

 lt;templategt;  lt;divgt;  lt;custom-input v-model="searchText"gt;lt;/custom-inputgt;  lt;pgt;{{ searchText }}lt;/pgt;  lt;/divgt; lt;/templategt;  lt;scriptgt; import CustomInput from "./element2/CustomInput.vue";  export default {  data() {  return {  searchText: "",  };  },  components: {  CustomInput,  }, }; lt;/scriptgt;  lt;stylegt;lt;/stylegt; 

Пользовательский ввод.vue

 lt;templategt;  lt;divgt;  lt;input  :value="modelValue"  @input="$emit('update:modelValue', $event.target.value)"  /gt;  lt;/divgt; lt;/templategt;  lt;scriptgt; export default {  props: ["modelValue"], }; lt;/scriptgt;  lt;stylegt;lt;/stylegt; 

Но это также не сработало. Возможно, я неправильно понял код и содержимое API. Я хочу знать, что означает API и почему работает первый код, который я написал ранее, и как сократить v-модель с помощью пользовательского компонента.

Комментарии:

1. почему вы отправляете props ребенку и emit то же значение снова своему родителю?