改造el-tag动态编辑标签,支持自动提示(上)
Demo预览:
https://sunzsh.github.io/vue-demos/#/autocomplete-tag-demo
代码:
https://github.com/sunzsh/vue-el-demo/blob/master/src/components/Autocomplete2/index.vue
https://github.com/sunzsh/vue-el-demo/blob/master/src/views/autocomplete-tag-demo.vue
大家记不记得
饿了么UI里有这样一个动态
编辑标签的demo
就是我可以在这里点击
然后自己输入标签
其实就是一个按钮
和一个文本框的切换
然后呢我就想
能不能把这个文本框啊
换成饿了么UI的这个
autocomplete
我就试了一下
把原来demo里这个input注视掉
换成这个autocomplete
但是呢它有两个bug
我们先来看第一个
就是啊它展开的这个层
默认只能跟文本框是一样宽度的
所以导致
我下边这里边的内容
有的就显示不完整
但是呢
我又不想修改这个文本框的宽度
因为他默认是跟这个按钮是一样宽的
文本框改的太宽的话就不好看了
所以呢我们需要想办法
突破它原来这个宽度的限制
那怎么解决呢
我们先来看它这个Autocomplete的源码哈
它这里边有一个watch监听
监听这个建议的层的展开的时候
它会向这个组件
广播一个visible的事件
我们先来看这个组件
在这里
然后呢
它会在这里边广播一个visible的事件
大家看在这里
他接收的这个第二个参数就会作为
弹开的这个层的宽度
所以呢
问题的关键就是刚才他在传递的时候
在这里传的这个宽度
他现在默认指传这个文本框的宽度
所以呢我们就从这个地方入手
我们再写一个组件叫Autocomplete
同时我们再定义一个参数叫popperWidth
然后我们在这个监听
suggestionVisible的时候呢
我们优先去取这个PopperWidth就
可以了其实很简单
我们再回到这个demo
那这个时候呢
我们把它换成我们自己封装
这个组件下边我已经导进来了哈
我把这个复制一下 autocomplete
好我们直接把它拿过来呢
先看一下原来的功能是不是都可以
刷新一下
大家看 是可以的
然后这还是不行
这时候呢我们再给它加一个参数叫
:popper-width
我们不用200,用120就够了
刷新一下
大家看 这就够宽了
好这是第一个问题
那第二个bug是什么呢
我们先来看一下这个操作哈
首先我这里可以随便输入
然后呢onblur的时候他就加进来
然后呢我还可以在下边选
大家看 但是如果我在这输入了
大家看 筛选出来了两个如果选"SUV"
注意它还是我输入的那个v进来了
为什么会这样呢
因为它会先触发这个blur事件
它就会把这个文本框里的内容
直接放进去了
那由于时间原因啊
这个问题我们放到下一期
大家如果感兴趣的话呢
可以自己研究一下
最后更新于