创建 src/directives/auto-resize.js 文件
export default {
mounted(el) {
el.style.height = "auto";
el.style.overflowY = "hidden";
el.style.boxSizing = "border-box";
const resizeTextarea = () => {
el.style.height = "auto";
el.style.height = el.scrollHeight + "px";
};
el.addEventListener("input", resizeTextarea);
resizeTextarea();
el._resizeTextarea = resizeTextarea;
},
unmounted(el) {
el.removeEventListener("input", el._resizeTextarea);
delete el._resizeTextarea;
},
};
在 main.js 中注册全局指令
import { createApp } from "vue";
import App from "./App.vue";
import autoResize from "./directives/auto-resize";
const app = createApp(App);
app.directive("auto-resize", autoResize);
app.mount("#app");
在.vue 中使用
<template>
<textarea v-auto-resize placeholder="请输入内容"></textarea>
</template>
<script>
export default {
name: 'AutoResizeTextarea'
};
</script>
<style scoped>
textarea {
width: 100%;
min-height: 50px;
box-sizing: border-box;
}
</style>
如果想实现一行的效果需要设置 rows=”1”


<textarea rows="1"></textarea>