2024-12-04 jacklmoore 的 Autosize 可以用在vue 裡面嗎?

2024-12-04 jacklmoore 的 Autosize 可以用在vue 裡面嗎?

是的,Jack Moore 的 Autosize 可以用在 Vue 中,但需要稍微調整以適應 Vue 的框架。Autosize 的作用是自動調整 <textarea> 的高度以適應其內容,這與 Vue 是兼容的。以下是一些具體的實現步驟和建議:


1. 安裝 Autosize

你可以使用 npm 安裝 Autosize:

1
npm install autosize

或直接透過 <script> 引用 CDN:

1
<script src="https://cdn.jsdelivr.net/npm/autosize/dist/autosize.min.js"></script>

2. 在 Vue 中使用 Autosize

使用 Vue 的 onMounted(Vue 3)

你可以在組件的 onMounted 中初始化 Autosize,並監聽 textarea 元素的變化。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<template>
<div>
<textarea v-model="text" ref="textarea" placeholder="Type something..."></textarea>
</div>
</template>

<script>
import { ref, onMounted, onUnmounted } from 'vue';
import autosize from 'autosize';

export default {
setup() {
const text = ref('');
const textarea = ref(null);

onMounted(() => {
if (textarea.value) {
autosize(textarea.value);
}
});

onUnmounted(() => {
if (textarea.value) {
autosize.destroy(textarea.value); // 確保在組件卸載時清理資源
}
});

return {
text,
textarea,
};
},
};
</script>

<style>
textarea {
width: 100%;
min-height: 50px;
resize: none; /* 禁止用戶手動調整大小 */
}
</style>

3. 注意點

  • 更新數據時的同步問題:
    當內容更新時,Autosize 會自動調整,但如果是通過程式設置 v-model 值,則可能需要手動觸發調整:

    1
    autosize.update(textarea.value);
  • 僅作用於 <textarea> 元素:
    Autosize 不會對其他輸入類型生效,所以請確保你只用於 <textarea>


4. 封裝成自定義指令(可選)

為了更方便重用,可以將 Autosize 封裝成 Vue 的自定義指令:

1
2
3
4
5
6
7
8
9
10
11
12
13
import autosize from 'autosize';

export default {
mounted(el) {
autosize(el);
},
updated(el) {
autosize.update(el);
},
unmounted(el) {
autosize.destroy(el);
},
};

使用這個指令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<template>
<textarea v-autosize v-model="text" placeholder="Type something..."></textarea>
</template>

<script>
import autosizeDirective from './directives/autosize';

export default {
directives: {
autosize: autosizeDirective,
},
data() {
return {
text: '',
};
},
};
</script>

這樣做可以讓 Autosize 更方便地集成到你的 Vue 應用中!如需更多調整,可參考 Autosize 的官方文檔