Vue 动态组件与 v-once 指令的实现


Posted in Javascript onFebruary 12, 2019

本文介绍了Vue 动态组件与 v-once 指令的实现,分享给大家,具体如下:

<div id="root">
  <child-one></child-one>
  <child-two></child-two>
  <button>change</button>
</div>
Vue.component('child-one', {
  template: `<div>child-one</div>`,
})
Vue.component('child-two', {
  template: `<div>child-two</div>`,
})
let vm = new Vue({
  el: '#root'
})

上面代码需实现,当点击按钮时,child-one和child-two实现toggle效果,该怎么实现呢?

<div id="root">
  <child-one v-if="type === 'child-one'"></child-one>
  <child-two v-if="type === 'child-two'"></child-two>
  <button @click="handleBtnClick">change</button>
</div>
Vue.component('child-one', {
  template: `<div>child-one</div>`,
})
Vue.component('child-two', {
  template: `<div>child-two</div>`,
})
let vm = new Vue({
  el: '#root',
  data: {
    type:'child-one'
  },
  methods: {
    handleBtnClick(){
      this.type = this.type === 'child-one' ? 'child-two' : 'child-one'
    }
  }
})

通过上面handleBtnClick函数的实现,配合v-if指令就能实现toggle效果

动态组件

下面这段代码实现的效果和上面是一样的。

<div id="root">
  <component :is="type"></component>   //is内容的变化,会自动的加载不同的组件
  <button @click="handleBtnClick">change</button>
</div>
Vue.component('child-one', {
  template: `<div>child-one</div>`,
})
Vue.component('child-two', {
  template: `<div>child-two</div>`,
})
let vm = new Vue({
  el: '#root',
  data: {
    type:'child-one'
  },
  methods: {
    handleBtnClick(){
      this.type = this.type === 'child-one' ? 'child-two' : 'child-one'
    }
  }
})

动态组件的意思是它会根据is里面数据的变化,会自动的加载不同的组件

v-noce指令

每次点击按钮切换的时候,Vue 底层会帮我们干什么呢?Vue 底层会判断这个child-one组件现在不用了,取而代之要用child-two组件,然后它就会把child-one组件销毁掉,在创建一个child-two组件。假设这时child-two组件要隐藏,child-one组件要显示,这个时候要把刚刚创建的child-two销毁掉,在重新创建child-one组件,也就是每一次切换的时候,底层都是要销毁一个组件,在创建一个组件,这种操作会消耗一定的性能。如果我们的组件的内容,每次都是一样的可以在上面加一个v-once,看下面代码。

Vue.component('child-one', {
  template: `<div v-once>child-one</div>`,
})
Vue.component('child-two', {
  template: `<div v-once>child-two</div>`,
})

加上v-once指令之后,有什么好处呢?当chlid-one组件第一次被渲染时,因为组件上面有一个v-once指令,所以它直接就放到内存里了,当切换的时候child-two组件第一次被渲染时,它也会被放到内存里,再次点击切换时,这时并不需要再重新创建一个child-one组件了,而是从内存里直接拿出以前的child-one组件,它的性能会更高一些。

所以在 Vue 当中,通过v-once指令,可以提高一些静态内容的展示效率

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
编写js扩展方法判断一个数组中是否包含某个元素
Nov 08 Javascript
javascript原生和jquery库实现iframe自适应高度和宽度
Jul 18 Javascript
javascript检测浏览器的缩放状态实现代码
Sep 28 Javascript
jquery渐隐渐显的图片幻灯闪烁切换实现方法
Feb 26 Javascript
老生常谈onBlur事件与onfocus事件(js)
Jul 09 Javascript
vue2.0+webpack环境的构造过程
Nov 08 Javascript
JS组件系列之MVVM组件 vue 30分钟搞定前端增删改查
Apr 28 Javascript
详解设置Webstorm 利用babel将ES6自动转码成ES5
Dec 20 Javascript
vue 微信授权登录解决方案
Apr 10 Javascript
JavaScript获取用户所在城市及地理位置
Apr 21 Javascript
详解在Angular4中使用ng2-baidu-map的方法
Jun 19 Javascript
webpack HappyPack实战详解
Oct 08 Javascript
在微信小程序中保存网络图片
Feb 12 #Javascript
VUE中使用MUI方法
Feb 12 #Javascript
如何利用ES6进行Promise封装总结
Feb 11 #Javascript
在vue项目中引入vue-beauty操作方法
Feb 11 #Javascript
Vue表单控件绑定图文详解
Feb 11 #Javascript
图文讲解vue的v-if使用方法
Feb 11 #Javascript
ES6 如何改变JS内置行为的代理与反射
Feb 11 #Javascript
You might like
邮箱正则表达式实现代码(针对php)
2013/06/21 PHP
PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)
2013/07/02 PHP
php Imagick获取图片RGB颜色值
2014/07/28 PHP
php中PDO方式实现数据库的增删改查
2015/05/17 PHP
简单理解PHP的面向对象编程方式
2016/05/17 PHP
PHP实现类似于C语言的文件读取及解析功能
2017/09/01 PHP
详解php curl带有csrf-token验证模拟提交方法
2018/04/18 PHP
Laravel框架源码解析之反射的使用详解
2020/05/14 PHP
JavaScript基本概念初级讲解论坛贴的学习记录
2009/02/22 Javascript
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
2012/02/03 Javascript
深入理解JavaScript中的对象复制(Object Clone)
2016/05/18 Javascript
Angular.js 实现数字转换汉字实例代码
2016/07/14 Javascript
vue 动态修改a标签的样式的方法
2018/01/18 Javascript
JavaScript实现仿Clock ISO时钟
2018/06/29 Javascript
jQuery实现的老虎机跑动效果示例
2018/12/29 jQuery
js序列化和反序列化的使用讲解
2019/01/19 Javascript
小试小程序云开发(小结)
2019/06/06 Javascript
python3 实现的人人影视网站自动签到
2016/06/19 Python
python实现日常记账本小程序
2018/03/10 Python
对Python3 * 和 ** 运算符详解
2019/02/16 Python
pyQT5 实现窗体之间传值的示例
2019/06/20 Python
Python3 main函数使用sys.argv传入多个参数的实现
2019/12/25 Python
详细分析Python垃圾回收机制
2020/07/01 Python
Python3基于print打印带颜色字符串
2020/07/06 Python
python 基于opencv实现图像增强
2020/12/23 Python
open_basedir restriction in effect. 原因与解决方法
2021/03/14 PHP
css3实现文字首尾衔接跑马灯的示例代码
2020/10/16 HTML / CSS
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
Lookfantastic俄罗斯:欧洲在线化妆品零售商
2019/08/06 全球购物
简历中个人自我评价范文
2013/12/26 职场文书
旅游项目开发策划书
2014/01/18 职场文书
精彩的广告词
2014/03/19 职场文书
用人单位终止解除劳动合同证明书
2014/10/06 职场文书
甲乙双方合作协议书
2014/10/13 职场文书
大学生饮品店创业计划书范文
2019/07/10 职场文书
Android实现图片九宫格
2022/06/28 Java/Android