fritx / vue-at

At.js for Vue.
https://fritx.github.io/vue-at/
MIT License
529 stars 114 forks source link

添加一个按钮,点击后往textarea中添加@字符,并触发下拉框 #26

Open kevinPFish opened 6 years ago

kevinPFish commented 6 years ago

额外添加一个按钮,点击后textarea中添加@,并触发下拉框如何实现。使用v-model会失去焦点,并不能触发下拉框

fritx commented 6 years ago

我测试了一下,应该是ok的,不确定有没有更好的实现方式哈 稍后我在在线文档里补充这个案例。

<button @click="insertAt">@</button>
<at :at="at" :members="members">
  <textarea ref="ed"></textarea>
</at>
insertAt () {
  let { ed } = this.$refs
  ed.focus() // 如果之前没有焦点,则会定位到文本最前而不是最后,可能可以改进
  document.execCommand('insertText', 0, ' ' + this.at) // 一般应该要加空格
  let e = document.createEvent('HTMLEvents')
  e.initEvent('input', true, true)
  ed.dispatchEvent(e)
}

事件的触发,我一直都是参照vue的测试代码: https://github.com/vuejs/vue/blob/dev/test/helpers/trigger-event.js

kevinPFish commented 6 years ago

@fritx 感谢博主这么快回复,我去看看。