---template部分
div
 el-popover(ref="message", placement="top-start", title="标题", width="100", trigger="hover",content="这是一段内容,这是一段内容,这是一段内容,这是一段内容。"
 a(href="javascript:void(0)", v-if="show", style="margin-right:10px") 我是无辜的
a(href="javascript:void(0)", v-popover:message="", style="margin-right:10px") 显示弹窗
a(href="javascript:void(0)", v-if="show", style="margin-right:10px") 我是无辜的2
---js部分
mounted () {
setTimeout(() => {
this.show = true;
}, 2000);
}

这段代码会出现这样的情况:

1.页面进入时,鼠标放在 “显示弹窗”上 popover气泡会出现

2.两秒钟之后 鼠标放在 “显示弹窗”上 popover气泡不再出现,而鼠标放在 “我是无辜的” a 标签上,popover出现

原因:

1.在刚进入页面时VNode树只有一个 a标签

div

a(显示弹窗)

2.2秒之后VNode树

div

a(我是无辜的)

a(显示弹窗)

a(我是无辜的2)

Vue 在2秒后,生成了新的Vnode树,这时Vue 将对比这两棵树,以此来修改dom

Vue 会使用一种最大限度减少动态元素并且尽可能的尝试修复/再利用相同类型元素的算法

上面那个例子,正是由于 第一棵树的  a(显示弹窗) 这个node  被复用导致的

因为他们是相同类型元素,复用了这个元素后, 会把 a(我是无辜的) 节点相应的静态属性 重新赋值给 a(显示弹窗)  元素,包括 文本内容,class名等。

这基本上让大家看不到被复用的痕迹,就好像是新创建了 a(我是无辜的) node 一样

其实,a(我是无辜的)  本体就是 a(显示弹窗)  元素。 这样,在2秒之后,鼠标放在 a(我是无辜的)  node 上,显示出popover,的现象就可以解释了

 

 

特性

 key 

key 的特殊属性主要用在 Vue 的虚拟 DOM 算法,在新旧 nodes 对比时辨识 VNodes。

如果不使用 key,Vue 会使用一种最大限度减少动态元素并且尽可能的尝试修复/再利用相同类型元素的算法。

使用 key,它会基于 key 的变化重新排列元素顺序,并且会移除 key 不存在的元素。

Vue 在进行 v-for 静态编译时, 如果发现没有指定 :key ,或者 重复的key 会给出 警告提示。

上面的例子,可以看成 是 手动写的v-for 相当于 a(v-for=(item in [1,2,3])) 。

 

为了避免上例子的情况 可以给 a标签上 加上 :key 来避免。

但是,也必须要根据场景灵活使用,

有时加上key 也可以会引起  触发过渡:

<transition>
<span :key="text">{{ text }}</span>
</transition>

只要一改变 text 就有动效

总之,灵活使用吧,哈哈

 

Vue 就地复用策略注意事项的更多相关文章

  1. vue的就地复用--- v-for与:key

    v-for遵循的是vue的就地复用原则.文本与数据是绑定的,所以当文本被重新渲染的时候,列表也会被重新渲染. 就地复用只适用于不依赖子组件状态或临时DOM状态的列表渲染输出.[比如表单输入值的列表渲染 ...

  2. RouteReuseStrategy angular路由复用策略详解,深度刨析路由复用策略

    关于前端路由复用策略网上的文章很多,大多是讲如何实现tab标签切换历史数据,至于如何复用的原理讲的都比较朦胧,代码样例也很难适用各种各样的路由配置,比如懒加载模式下多级嵌套路由出口网上的大部分代码都会 ...

  3. vue基础中的注意事项,以及一些学习心得

    vue中你不知道的东西.以及注意事项 v-html 使用 v-html的时候该指令中的值会覆盖绑定标签中原有的值,且使用v-html的时候不要将他设置为给用户提供内容的地方,因为v-html很容易被X ...

  4. Vue可复用过渡和动态过渡

    前面的话 本文将详细介绍Vue可复用过渡和动态过渡 可复用过渡 过渡可以通过 Vue 的组件系统实现复用.要创建一个可复用过渡组件,需要做的就是将 <transition> 或者 < ...

  5. 用于实现tab页签切换页面的angular路由复用策略

    使用场景 打开菜单页面的时候,出现对应页面的页签.切换页签,原来的页面信息状态保留,关闭页签则保留的信息删除.使用路由复用策略,保存路由快照.实现效果如图所示 实现过程 概述: 1.在app.modu ...

  6. vue 组件复用 - component

    vue 组件复用 - component vue 组件复用 就是对 component 标签的使用 先看图 下图看使用 结果: 可以看到 在箱包 这一项,我将banner 组件用了两次,我 每次 点击 ...

  7. vue.js实战——vue元素复用

    Vue在渲染元素时,出于效率考虑,会尽可能地复用已有的元素而非重新渲染,例: <!DOCTYPE html> <html lang="en"> <he ...

  8. vue路由复用

    使用多个<router-view>可以复用路由,但是每个<router-view>要带一个name属性 更改路由,配置默项和复用项,定义复用项的name 例子: App.vue ...

  9. Vue 组件复用性和slot

    1.组件可复用 2.slot元素作为组件模板之中的内容分发插槽,元素自身可以被替换 <!DOCTYPE html> <html lang="en"> < ...

随机推荐

  1. C++ 细小知识点

    1. C++ 拷贝构造函数参数为const类型 原因:因为复制构造函数是用引用方式传递复制对象,引用方式传递的是地址,因此在构造函数内对该引用的修改会影响源对象,防止源对象被修改,就要把参数类型设为c ...

  2. Wireshark分析RabbitMQ

    消费者Code: using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

  3. 将DevExpress.Utils.ImageCollection变量的image导出

    private void tspBtnExportExcel_Click(object sender, EventArgs e) { //暂时用来导出图片 string filePath = Syst ...

  4. js清除未知定时器的方法

    js清除未知定时器的方法 在需要有实时性更新数据的项目中,我们经常会用到很多定时器,我们可能需要一个可以一次性清除所有定时器的方法,并且不通过指定ID一个一个去清除,以下提供两种解决方案:   1.定 ...

  5. js中可以直接使用id而不用获取id

    先来看一个例子: 不获取 id 也可以使用 id 元素. <!-- Author: XiaoWen Create a file: 2017-01-11 13:58:01 Last modifie ...

  6. input file获取选择图片的本地路径和base64路径

    input file获取选择图片的本地路径和base64路径 本地路径: myHeadFile: function (e) { // 这里是input file 的onchange事件 ] const ...

  7. python group()--转载

    import re a = "123abc456" print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0) ...

  8. Myeclipse下配置svn

    转载高鑫的..嘻嘻.. MyEclipse安装配置SVN 2013.10.15 No Comments 67 Views 配置之前请先关闭MyEclipse,OK开始了 1.解压site-1.6.18 ...

  9. Qt_DLL_4_MFC

    1.下载地址: https://github.com/qtproject/qt-solutions 2. ZC: 做用于MFC的DLL的时候,app的创建 只能是在 主线程中,不然的话 就会报错... ...

  10. PHP求并集,交集,差集

    PHP求并集,交集,差集 一.总结 一句话总结:在php中如果我想要对两个数组进行如并集.交集和差集操作,我们可直接使用php自带的函数来操作如array_merge(),array_intersec ...