728x90
<script>
export default {
name: 'ResizableTextarea',
props: {
value: {
type: String,
default: '',
},
},
methods: {
updateValue(event) {
if (event.shiftKey) return;
if (event.keyCode === 13) {
this.$emit('enter');
event.preventDefault();
setTimeout(() => {
this.resize();
});
return;
}
this.resize();
this.$emit('input', event.target.value);
},
resize() {
const targetTextArea = this.$refs.remarksTextArea;
targetTextArea.style.height = '1px';
targetTextArea.style.height = targetTextArea.scrollHeight + 'px';
this.$emit('resize', targetTextArea.scrollHeight);
},
},
};
</script>
<template>
<textarea
type="text"
:value="value"
:ref="`remarksTextArea`"
placeholder="메세지를 입력하세요"
@keydown="updateValue($event)"
></textarea>
</template>
<style lang="scss" scoped="scss">
textarea {
width: 100%;
border-radius: 4px;
padding: 8px;
height: 38px;
resize: none;
overflow-y: hidden;
min-height: 38px;
max-height: 80px;
}
</style>
728x90
'Vue.js' 카테고리의 다른 글
[Vue] 조건부 렌더링 에러 (0) | 2023.03.14 |
---|---|
[Vuejs] Vuex store 메서드 스타일 액세스 (0) | 2022.12.13 |
[Vue]test-utils $route 목킹 제대로 하는 방법 (0) | 2022.11.27 |
[Vue] test-utils TypeError: Cannot read property 'parentNode' of undefined (0) | 2022.11.27 |
[Vue] textarea 스크롤말고 높이가 늘어나게 처리하기 (0) | 2022.11.26 |
댓글