You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在@vueup/vue-quill中调用getSelection()报错:无法读取null的getSelection属性

解决VueQuill调用getSelection()报null错误的问题

问题原因

你直接在<script setup>顶层调用quill.value.getSelection()时,QuillEditor组件还没完成挂载,此时quill.value是null,所以会触发读取null属性的错误。

解决方案

1. 等待组件挂载后再访问实例

使用Vue的onMounted生命周期钩子,确保组件挂载完成后再调用Quill的API:

<QuillEditor ref="quill" :options="editorOption" v-model:content="payload.body" contentType="html" />

<script lang="ts" setup>
import { QuillEditor } from '@vueup/vue-quill';
import '@vueup/vue-quill/dist/vue-quill.snow.css';
import { ref, onMounted } from 'vue';

const props = defineProps({
  type: {
    type: String,
    required: true
  },
  id: {
    type: Number
  }
});
const emit = defineEmits(['update:payload', 'loading'])
const currentRoute = useRoute();

const quill = ref(null)

onMounted(() => {
  // 组件挂载完成后,quill.value才会指向Quill实例
  const selection = quill.value?.getSelection();
  if (selection) {
    console.log('光标位置:', selection);
    // 这里可以执行添加文本等操作
  }
});
</script>

2. 监听光标选择变化(实时响应场景)

如果需要实时获取光标位置或选择内容,建议通过Quill的selection-change事件监听,无需手动调用getSelection():

<QuillEditor 
  ref="quill" 
  :options="editorOption" 
  v-model:content="payload.body" 
  contentType="html"
  @selection-change="handleSelectionChange"
/>

<script lang="ts" setup>
// ... 其他导入和定义

const handleSelectionChange = (range: any, oldRange: any, source: any) => {
  if (range) {
    console.log('当前光标/选择范围:', range);
    // 在这里处理添加文本等逻辑
  }
}
</script>

注意事项

  • 始终用可选链操作符?.访问quill.value的属性,避免因实例未就绪引发错误。
  • 不要在<script setup>顶层直接访问ref的value,除非能确定它已经完成初始化。

内容的提问来源于stack exchange,提问作者simpledev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 12:26:12