Отказаться от vue3 + nuxt3 js

У меня есть вопрос. Я хочу отменить событие отправки от дочернего компонента к родительскому компоненту (используя el-input в element plus).

Я пытаюсь узнать некоторые решения, но испускаю отказ, не работающий, например, ввод часов, испускаю modelValue. Я хочу передать 1 параметр "debounce", как указано выше, и предотвратить нормальную работу кода.

//Custom Input
<script lang = "ts" setup>
const search = ref('')
</script>

<template>
  <CustomInput
    :model-value = "search"
    placeholder = "Search"
    type = "search"
    class = "w-full md:max-w-[330px]"
    :debounce = "500"
    @update:modelValue = "(newValue: string) => (search = newValue)"
  />
</template>
//input
<script lang = "ts" setup>
interface Props {
  modelValue?: string
  placeholder?: string
  type: string
  debounce: number
}
const props = withDefaults(defineProps<Props>(), {
  modelValue: '',
  placeholder: 'Please input',
  type: 'text',
  debounce: 0
})
const emit = defineEmits(['update:modelValue'])
// const debounceInput = debounce(() => {
//   let value = 'ok'
//   emit('update:modelValue', value)
// }, props.debounce)
const debounceInput = (e: any) => {
  let value = e.target.value
  emit('update:modelValue', value)
}
</script>

<template>
  <el-input
    v-bind = "$attrs"
    :value = "modelValue"
    :placeholder = "placeholder"
    :type = "type"
    class = "base-input"
    :class = "{
      search: type === 'search'
    }"
    @input = "debounceInput"
  >
    <template #suffix>
      <el-icon>
        <img
          v-if = "type === 'search'"
          class = "w-[18px] h-[18px] mx-auto cursor-pointer"
          src = "images/search.svg"
          alt = "logo"
        />
      </el-icon>
    </template>
  </el-input>
</template>
//debounce function
export const debounce = (callback: Function, delayTime: number) => {
  let timeOut
  return () => {
    timeOut = setTimeout(() => callback(), delayTime)
  }
}

Вставьте код в свой вопрос, а не в виде изображений. Кроме того, какие шаги по отладке вы сделали? Что значит "не работает"? Любые ошибки или заметное поведение? Перечислите некоторые решения, которые вы пробовали. Это поможет другим, которым не давали лишних советов
yoduh 27.04.2023 17:27

я только что отредактировал это

M12H 28.04.2023 08:34
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
93
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

устранение дребезга функции:

export function debounce(func, timeout) {
  let timeoutId;
  return (...args) => {
    clearTimeout(timeoutId);
    timeoutId = setTimeout(() => {
      func(...args);
    }, timeout);
  };
}

Затем использовать его:

<script>
import { debounce } from 'debounce.js'

const debouncedInput = debounce((e) => 
  emit("update:modelValue", e.target.value),
  300 // timeout in ms
);
</script>

с общим <input> для простоты:

<template>
  <input
    :value = "modelValue"
    @input = "debouncedInput"
    placeholder = "Please input"
    type = "text"
  />
</template>

Вот codeandbox пример. Также должно отлично работать при реализации с помощью <el-input> и машинописного текста, который я оставлю вам.

Кстати, эти свойства у вас есть на <CustomInput>:

:modelValue = "search"
@update:modelValue = "(newValue: string) => (search = newValue)"

Все можно заменить следующим сокращением:

v-model = "search"

Я попробовал ваш код, и он очень похож на мой код. Это действительно не работает с TypeScript и el-Input. я уверен в этом

M12H 28.04.2023 17:03
@input то же самое для <input>, что и <el-input>, а машинописный текст - это просто... шрифты. это будет работать при условии правильной реализации. если у вас есть конкретная проблема с предоставленной функцией устранения дребезга, обновите свой вопрос, указав собственный обновленный код и указав ошибку реализации.
yoduh 28.04.2023 17:29

Глядя на документацию el-input, нет :value опоры. просто используйте v-model вместо этого

yoduh 28.04.2023 17:59
ну вот... работа с element-plus и typescript
yoduh 28.04.2023 18:06

[plugin:vite:vue] v-model нельзя использовать в реквизите, потому что локальные привязки реквизита недоступны для записи. Вместо этого используйте привязку v-bind в сочетании с прослушивателем v-on, который генерирует событие update:x.

M12H 29.04.2023 14:50

Это происходит, когда я использую «v-model» в вашем CustomInput. Я знаю, что ваш код правильный, но я не понимаю, почему он не работает в моем проекте.

M12H 29.04.2023 14:52

Я просто пытаюсь: v-model в CustomInput ... но все равно не работает :(

M12H 29.04.2023 15:02

можете ли вы объяснить мне, почему он работает в STACK, а не в IDE

M12H 03.05.2023 06:12

Другие вопросы по теме