element-ui
InfiniteScroll
在线地址
https://codesandbox.io/p/sandbox/hopeful-knuth-twdttl?file=%2...
我的使用方式
v-infinite-scroll="load"
:infinite-scroll-immediate="false"
但是还是触发了 load
方法
默默打开 element-ui
源码调试了一下packages/infinite-scroll/src/main.js
line:69
let value = el.getAttribute(`infinite-scroll-${key}`);
发现这个 value 永远都是 true
,但是我明明传递的是 false
啊
后来看了 vue
源码里面 对 dom
的 attribute
有这样一段处理
src/platforms/web/runtime/modules/attrs.js
line:68
if (isFalsyAttrValue(value)) { el.removeAttribute(key) } else { ... }
false
的值会被移除掉
导致 element-ui
获取到的 value
永远是 null
就取了默认值 true
请教一下各位大佬,这是 element-ui
的 bug
还是我哪里处理的有问题?
希望能解释一下这个问题
这里有几个因素:
1.
InfiniteScroll
是一个指令,指令可以附加到任何元素上,指令可以获取绑定值的具体类型。2.
vue
里不显示定义成props
的属性都会成为元素的attribute
附加到元素上,而原生DOM的attribute
都是字符,不存在布尔、数值这些类型,所以绑定属性【不是props】的值都只能是字符,如果你用v-bind
绑定属性那么vue
也会将其转成字符附加到DOM上【除开false
】3.
InfiniteScroll
拓展的那些属性其实是DOM的attribute
,并非prop
,element-ui文档里并没有对这个进行说明而且还显眼的写上了类型,大多数第一直觉都会将其当做prop
来传递,出问题了第一时间可能也不容易联想到第2点,文档里最好是说明是字符'false'|'true'
这样更好一点综合以上原因,它不是bug,但是非要甩锅的话,锅在
element-ui
吧我觉得