---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# 获取当前IIS请求地址

    using System;using System.Collections.Generic;using System.Linq;using System.Web; /// <summary> ...

  2. Python3基础 getatime getctime getmtime 文件的最近访问 + 属性修改 + 内容修改时间

             Python : 3.7.0          OS : Ubuntu 18.04.1 LTS         IDE : PyCharm 2018.2.4       Conda ...

  3. CenterOS下从零起步简单部署RockMongo

    使用Mongodb,对于调试Query,查看Collection等状态,有Rockmongo是非常方便的. 研究了下Rockmongo的部署,主要是依赖PHP环境的web服务器,当前有两种服务器,一种 ...

  4. UVa 1590 IP网络(简单位运算)

    Description   Alex is administrator of IP networks. His clients have a bunch of individual IP addres ...

  5. MVC ---- DBHelper.ttinclude

    在通过T4模版引擎之基础入门 对T4有了初步印象后,我们开始实战篇.T4模板引擎可以当做一个代码生成器,代码生成器的职责当然是用来生成代码(这不是废话吗).而这其中我们使用的最普遍的是根据数据库生成实 ...

  6. go 并发

    package main import ( "fmt" "time" ) func say(s string) { ; i < ; i++ { time. ...

  7. Ubuntu14.04 terminal添加右键

    设置Ubuntu 14.04右键终端的方法如下: 首先要安装一个包,即可在右键里面添加一个“打开终端”的菜单. sudo apt-get install nautilus-open-terminal ...

  8. Netcat使用方法

    netcat被誉为网络安全界的‘瑞士军刀',相信没有什么人不认识它吧......   一个简单而有用的工具,透过使用TCP或UDP协议的网络连接去读写数据.它被设计成一个稳定的后门工具,能够直接由其它 ...

  9. java编写编译器和解释器

     on 2012-07-14 21:24 Bang 阅读(102) 评论(0) 编辑 收藏  续 第二部分 初始后端实现 框架后端支持编译器和解释器.现在框架抽象类Backend有两个极简版实现,一个 ...

  10. DrawDibDraw__ZC测试

    ZC: 先把 自己尝试成功的代码 记录下来,不要 弄没了之后 又忘了怎么弄... ZC: 代码 有点乱,没整理.没写 哪些是 原来MFC里面的 哪些是我自己写的,参考上一篇文章来看吧 1.VC6 的一 ...