🐛(textarea): 修复拼字阶段触发 update:modelValue 的问题
This commit is contained in:
parent
e8078f76b1
commit
4a42c6c162
@ -25,7 +25,7 @@ import {
|
|||||||
reactive,
|
reactive,
|
||||||
h,
|
h,
|
||||||
createTextVNode,
|
createTextVNode,
|
||||||
Fragment
|
Fragment,
|
||||||
} from "vue";
|
} from "vue";
|
||||||
import { useResizeObserver } from "@vueuse/core";
|
import { useResizeObserver } from "@vueuse/core";
|
||||||
import { TabData, TabInjectKey, TabPosition } from "./interface";
|
import { TabData, TabInjectKey, TabPosition } from "./interface";
|
||||||
|
@ -6,7 +6,7 @@ export default {
|
|||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { LayIcon } from "@layui/icons-vue";
|
import { LayIcon } from "@layui/icons-vue";
|
||||||
import { computed } from "vue";
|
import { computed, ref } from "vue";
|
||||||
import "./index.less";
|
import "./index.less";
|
||||||
|
|
||||||
export interface TextareaProps {
|
export interface TextareaProps {
|
||||||
@ -31,11 +31,15 @@ interface TextareaEmits {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const emit = defineEmits<TextareaEmits>();
|
const emit = defineEmits<TextareaEmits>();
|
||||||
|
const composing = ref(false);
|
||||||
|
|
||||||
const onInput = function (event: Event) {
|
const onInput = function (event: Event) {
|
||||||
const inputElement = event.target as HTMLInputElement;
|
const inputElement = event.target as HTMLInputElement;
|
||||||
emit("update:modelValue", inputElement.value);
|
|
||||||
emit("input", inputElement.value);
|
emit("input", inputElement.value);
|
||||||
|
if (composing.value) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
emit("update:modelValue", inputElement.value);
|
||||||
};
|
};
|
||||||
|
|
||||||
const onFocus = function (event: Event) {
|
const onFocus = function (event: Event) {
|
||||||
@ -56,6 +60,15 @@ const onClear = function () {
|
|||||||
emit("clear");
|
emit("clear");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const onCompositionstart = () => {
|
||||||
|
composing.value = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
const onCompositionend = (event: Event) => {
|
||||||
|
composing.value = false;
|
||||||
|
onInput(event);
|
||||||
|
};
|
||||||
|
|
||||||
const hasContent = computed(() => (props.modelValue as string)?.length > 0);
|
const hasContent = computed(() => (props.modelValue as string)?.length > 0);
|
||||||
|
|
||||||
const wordCount = computed(() => {
|
const wordCount = computed(() => {
|
||||||
@ -77,6 +90,8 @@ const wordCount = computed(() => {
|
|||||||
:disabled="disabled"
|
:disabled="disabled"
|
||||||
:maxlength="maxlength"
|
:maxlength="maxlength"
|
||||||
:class="{ 'layui-textarea-disabled': disabled }"
|
:class="{ 'layui-textarea-disabled': disabled }"
|
||||||
|
@compositionstart="onCompositionstart"
|
||||||
|
@compositionend="onCompositionend"
|
||||||
@input="onInput"
|
@input="onInput"
|
||||||
@focus="onFocus"
|
@focus="onFocus"
|
||||||
@change="onChange"
|
@change="onChange"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user