fritx / vue-at

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

at 前面空格?,at后怎么取出来? #8

Open KuiShang opened 7 years ago

KuiShang commented 7 years ago

1 以微信为例,不管前面是不是空格只要输入at,都会触发事件,目前博主这里似乎是前面空格才行。这个能否修复? 2 at后 肯定还是要取出来(发送出去),如何区分出,真正由于at触发的(ex:@小浩)和手动输入的(ex:@123),

fritx commented 7 years ago

1. 微信不可以呀,我安卓微信6.5.7,以及Mac微信2.2.1,都是a-z0-9紧跟@是无效的, 必须加空白符或标点。应该是为了无匹配email。 在这个issue里comment里@行为也是一样的。

image

image

2. 这里@不区分"at触发的"和"手动输入的",该库旨在消除多余的node节点 (和jquery.atwho的差异), at信息应以单纯的文本形态存储于content中。

实际上不应该区分,不然如果单纯copy/paste消息,at信息就会不一致, 比如我从记事本里粘贴"@某某"到微信中,也是应该唤醒@功能的,刚试了下。

应该是单纯以规则去从content中直接提取at信息,目前这个功能库里没有帮用户存储或提取, 需要用户自己去处理,库只负责把辅助把at信息插入content。

KuiShang commented 7 years ago

1 看来只有win版的微信,才会a-z0-9紧跟@是有效,不过现在感觉 有空格才出现更合理

qq 20170529101901

2 at取出问题,应该要修改一下这个库的源码才好实现吧, 比如,在data里增加一个数组,保存at成功的name, 当 selectItem 和 handleDelete 时 更新data的值。您觉得这样怎么样?

fritx commented 7 years ago

嗯,vue-at确实可以提供一个方法来直接获取at信息,如:

  1. v-model="atList" (×) ref: https://github.com/vuejs/awesome-vue/pull/1028#issuecomment-292839322
<at v-model="atList"></at>

感觉这里使用v-model不合理,因为双向绑定不合理, 如果直接操作atList,编辑器中的text应如何变化?帮用户把所有的@xx移除掉?

  1. @change="handleAtChange" (√)
<at @change="handleAtChange"></at>

<script>
handleAtChange (data) {
  this.atList = data
}
</script>

3 $refs.at.getAtList (√)

<at ref="at"></at>

<script>
send () {
  this.$refs.at.getAtList()  // -->  [...]
}
</script>

最直接了当,虽然一般不是很建议使用$refs: https://github.com/pablohpsilva/vuejs-component-style-guide#use-thisrefs-with-caution

还有没有其他想法?

KuiShang commented 7 years ago

暂时木油了,博主强大 O(∩_∩)O

KuiShang commented 7 years ago

还有一种场景没有考虑:当用户编辑 at的人名时候
image

这种情况下,如果之前存储了已经at的人名集合,要如何才能将其移除?不知道博主有没有好的解决办法

fritx commented 7 years ago

@KuiShang 噢抱歉哈哈,暂时还没空完善功能, 这个问题没事的,所以不管是1./2.,我原本就打算每次都是直接从完整的content重新匹配出atList, 所以不用担心增减不一致的问题

监听的事件直接是editor的input事件,所以不会错过什么

KuiShang commented 7 years ago

O(∩_∩)O谢谢

raind33 commented 4 years ago
  1. 微信不可以呀,我安卓微信6.5.7,以及Mac微信2.2.1,都是a-z0-9紧跟@是无效的, 必须加空白符或标点。应该是为了无匹配email。 在这个issue里comment里@行为也是一样的。

image

image

  1. 这里@不区分"at触发的"和"手动输入的",该库旨在消除多余的node节点 (和jquery.atwho的差异), at信息应以单纯的文本形态存储于content中。

实际上不应该区分,不然如果单纯copy/paste消息,at信息就会不一致, 比如我从记事本里粘贴"@某某"到微信中,也是应该唤醒@功能的,刚试了下。

应该是单纯以规则去从content中直接提取at信息,目前这个功能库里没有帮用户存储或提取, 需要用户自己去处理,库只负责把辅助把at信息插入content。

现在可以不输入空格,直接输入at触发面板么?

fritx commented 4 years ago

@raind33 可以的 有一个prop可以控制: https://fritx.github.io/vue-at/#/en/props

<at :avoidEmail="false"><editor /></at>
raind33 commented 4 years ago

确实可以,非常感谢!