vue+iview 当v-for不渲染问题 因为遇到Modal组件
2017-11-01 11:43
981 查看
<template lang="pug"> div#parent Button(@click="data.push(Math.random())") 添加 span data:{{data}} div(v-for="indx in data") {{indx}} Modal </template> <script> export default { data() { return { data: [] }; } }; </script>
运行如上代码,当点击添加的时候data这个数组的确在不停的增加数据,但是那个v-for却只增加了一行 就再也不动了。明明应该时data钟有多少就应该渲染多少行
解决办法
在v-for外面套一个div不要把Modal直接放在v-for后面 可以提前去
原因分析
通过分析 vue的 updateChildren函数 当数据变化的时候 这个函数会进行新旧虚拟节点vNode进行 对比。并且如果有新的vNode的时候会执行 如下这个vue的函数来进行真实dom的更新function insert (parent, elm, ref$$1) { if (isDef(parent)) { if (isDef(ref$$1)) { if (ref$$1.parentNode === parent) { // 注意这里- nodeOps.insertBefore(parent, elm, ref$$1); } } else { nodeOps.appendChild(parent, elm); } } }
看到代码后面注释的这一行 。
ref1:如果时我们这段代码的话就会把Modal这个dom元素传进来>并想在它之前插入新的元素。这里有一个判断ref1.parentNode === parent 如果Modal的附元素和v-for这个的父元素相等才会做插入操作。但是Modal这个元素又会被移动到body下面去,所以导致了界面不更新的问题。
注意
这个例子代码刚开始出来会有一个undefined 请参考这个文章http://blog.csdn.net/tearsknow/article/details/78411672
为什么点添加时还能渲染出一个,请研究vue中的updateChildren函数
相关文章推荐
- vue 后台数据获取与组件渲染、页面刷新数据消失的问题小结
- vue遇到过的坑(父组件向输入框组件传值进去,然后子组件利用传进来的数据进行数据绑定的问题与解决方法)
- 使用vue的v-for与v-if遇到的一个问题
- Vue系列:在vux的popup组件中使用百度地图遇到显示不全的问题
- 解决vue组件中使用v-for出现告警问题及v for指令介绍
- Vue.js v-bind遇到的数据渲染问题
- 解决vue同一slot在组件中渲染多次的问题
- vue计算属性时v-for处理数组时遇到的一个bug问题
- 使用material design组件遇到的一些问题
- 关于iview中[Vue warn]: Avoid using non-primitive value as key, use string/number value instead.影响性能的问题
- Vue 通过下表修改数组,页面不渲染问题
- 浅析深究什么是中间件 发布时间: 2016-06-10 作者:本站编辑 浏览次数:128 摘要: 因为工作的原因,我从金蝶集团调入金蝶中间件公司工作以来,经常遇到一个问题就是中间件公司是个什么
- for循环里嵌套使用ajax遇到的问题
- oracle 升级 遇到 NoServicesForProcessException 问题
- 遇到问题---mysql账户密码以及权限的问题 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor
- Vue.js中的列表渲染:v-for
- vue-strap 修改Modal组件
- 解决在jupyter notebook中遇到的ImportError: matplotlib is required for plotting问题
- iOS开发遇到的坑之六--使用cocopods管理第三方库时,编译出现Library not found for -lPods问题的解决办法
- Xcode遇到Library not found for -XXX问题