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 相关文章推荐
jquery tablesorter.js 支持中文表格排序改进
Dec 09 Javascript
jquery Mobile入门—外部链接切换示例代码
Jan 08 Javascript
js点击事件链接的问题解决
Apr 25 Javascript
javascript获取文档坐标和视口坐标
May 26 Javascript
JavaScript中的Math.LN2属性用法详解
Jun 12 Javascript
js实现简洁的滑动门菜单(选项卡)效果代码
Sep 04 Javascript
Javascript获取统一管理的提示语(message)
Feb 03 Javascript
老生常谈jquery id选择器和class选择器的区别
Feb 12 Javascript
vue调用高德地图实例代码
Apr 28 Javascript
原生JS实现日历组件的示例代码
Sep 22 Javascript
基于vue-cli 打包时抽离项目相关配置文件详解
Mar 07 Javascript
ES6的循环与可迭代对象示例详解
Jan 31 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(2)
2006/10/09 PHP
php快速url重写更新版[需php 5.30以上]
2010/04/25 PHP
PHP __autoload函数(自动载入类文件)的使用方法
2012/02/04 PHP
php多文件上传实现代码
2014/02/20 PHP
php中return的用法实例分析
2015/02/28 PHP
46 个非常有用的 PHP 代码片段
2016/02/16 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
2020/09/15 PHP
使用js获取QueryString的方法小结
2010/02/28 Javascript
javascript和HTML5利用canvas构建猜牌游戏实现算法
2013/07/17 Javascript
jQuery查询数据返回object和字符串影响原因是什么
2013/08/09 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
javascript编写实用的省市选择器
2015/02/12 Javascript
jquery+CSS3实现3D拖拽相册效果
2016/07/18 Javascript
vue.js vue-router如何实现无效路由(404)的友好提示
2017/12/20 Javascript
jquery 输入框查找关键字并提亮颜色的实例代码
2018/01/23 jQuery
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
2018/03/14 Javascript
在小程序中使用canvas的方法示例
2018/09/17 Javascript
Node.js使用supervisor进行开发中调试的方法
2019/03/26 Javascript
JS算法题之查找数字在数组中的索引位置
2019/05/15 Javascript
微信小程序文章详情页跳转案例详解
2019/07/09 Javascript
vue中的v-if和v-show的区别详解
2019/09/01 Javascript
vscode 插件开发 + vue的操作方法
2020/06/05 Javascript
[01:11]辉夜杯战队访谈宣传片—CDEC.Y
2015/12/26 DOTA
[01:21:36]CHAOS vs Alliacne 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
Python 图像处理: 生成二维高斯分布蒙版的实例
2019/07/04 Python
Python单元测试与测试用例简析
2019/11/09 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
CSS3 透明色 RGBA使用介绍
2013/08/06 HTML / CSS
HTML5 video 视频标签使用介绍
2014/02/03 HTML / CSS
学期研究性学习个人的自我评价
2014/01/09 职场文书
课堂教学改革实施方案
2014/03/17 职场文书
机电一体化专业毕业生自荐信
2014/06/19 职场文书
土地转让协议书
2014/09/27 职场文书
三严三实民主生活会发言稿
2014/10/13 职场文书
学生违纪检讨书200字
2014/10/21 职场文书
python playwright之元素定位示例详解
2022/07/23 Python