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 相关文章推荐
Javascript 获取滚动条位置等信息的函数
Sep 08 Javascript
javaScript checkbox 全选/反选及批量删除
Apr 28 Javascript
javascript实现密码强度显示
Mar 18 Javascript
浅谈javascript中for in 和 for each in的区别
Apr 23 Javascript
jQuery插件Echarts实现的渐变色柱状图
Mar 23 jQuery
详解Angular2表单-模板驱动的表单(Template-Driven Forms)
Aug 04 Javascript
JavaScript实现音乐自动切换和轮播
Nov 05 Javascript
bootstrap下拉分页样式 带跳转页码
Dec 29 Javascript
微信小程序利用swiper+css实现购物车商品删除功能
Mar 06 Javascript
js代码实现轮播图
May 04 Javascript
js实现鼠标点击飘爱心效果
Aug 19 Javascript
js实现自定义滚动条的示例
Oct 27 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随机显示图片的简单示例
2014/02/15 PHP
一个php短网址的生成代码(仿微博短网址)
2014/05/07 PHP
PHP中多维数组的foreach遍历示例
2014/06/13 PHP
修改ThinkPHP缓存为Memcache的方法
2014/06/25 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
2017/04/04 PHP
一些不错的js函数ajax
2008/08/20 Javascript
JavaScript EasyPager 分页函数
2011/05/25 Javascript
jquery刷新页面的实现代码(局部及全页面刷新)
2011/07/11 Javascript
js弹出层(jQuery插件形式附带reLoad功能)
2013/04/12 Javascript
js采用map取到id集合组并且实现点击一行选中一行
2013/12/16 Javascript
浅谈javascript中for in 和 for each in的区别
2015/04/23 Javascript
jQuery实现仿Google首页拖动效果的方法
2015/05/04 Javascript
深入解析Backbone.js框架的依赖库Underscore.js的作用
2016/05/07 Javascript
js手机号批量滚动抽奖实现代码
2020/04/17 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
2019/04/09 Javascript
mpvue网易云短信接口实现小程序短信登录的示例代码
2020/04/03 Javascript
vue实现给div绑定keyup的enter事件
2020/07/31 Javascript
Python实现代码统计工具(终极篇)
2016/07/04 Python
Python通过Django实现用户注册和邮箱验证功能代码
2017/12/11 Python
python3 发送任意文件邮件的实例
2018/01/23 Python
python pyheatmap包绘制热力图
2018/11/09 Python
python在openstreetmap地图上绘制路线图的实现
2019/07/11 Python
python flask 如何修改默认端口号的方法步骤
2019/07/12 Python
python文档字符串(函数使用说明)使用详解
2019/07/30 Python
Python 多线程搜索txt文件的内容,并写入搜到的内容(Lock)方法
2019/08/23 Python
解决更改AUTH_USER_MODEL后出现的问题
2020/05/14 Python
pandas dataframe 中的explode函数用法详解
2020/05/18 Python
Servlet都有哪些方法?主要作用是什么?
2014/03/04 面试题
个人自我评价和职业目标
2014/01/24 职场文书
药学职务聘任书
2014/03/29 职场文书
白血病捐款倡议书
2014/05/14 职场文书
四风问题原因分析及整改措施
2014/10/24 职场文书
2015年施工员工作总结范文
2015/04/20 职场文书
《检阅》教学反思
2016/02/22 职场文书
MySQL 如何设计统计数据表
2021/06/15 MySQL
浅谈Redis缓冲区机制
2022/06/05 Redis