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 相关文章推荐
使用IE6看老赵的博客 jQuery初探
Jan 17 Javascript
用JavaScript对JSON进行模式匹配 (Part 2 - 实现)
Jul 17 Javascript
使用JavaScript构建JSON格式字符串实现步骤
Mar 22 Javascript
js生成随机数之random函数随机示例
Dec 20 Javascript
JS Replace 全部替换字符的用法小结
Dec 24 Javascript
Js实现无刷新删除内容
Apr 29 Javascript
谈谈JavaScript异步函数发展历程
Sep 29 Javascript
jQuery代码性能优化的10种方法
Jun 21 Javascript
AngularJS通过$location获取及改变当前页面的URL
Sep 23 Javascript
详解Node.js中exports和module.exports的区别
Apr 19 Javascript
vue定义全局变量和全局方法的方法示例
Aug 01 Javascript
javascript canvas检测小球碰撞
Apr 17 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
收音机的保养
2021/03/01 无线电
zen cart新进商品的随机排序修改方法
2010/09/10 PHP
用php来改写404错误页让你的页面更友好
2013/01/24 PHP
php仿QQ验证码的实例分析
2013/07/01 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
2014/07/25 PHP
PHP清除字符串中所有无用标签的方法
2014/12/01 PHP
PHP使用mkdir创建多级目录的方法
2015/12/22 PHP
PHP中的随机性 你觉得自己幸运吗?
2016/01/22 PHP
PHP中类属性与类静态变量的访问方法示例
2016/07/13 PHP
PHP封装XML和JSON格式数据接口操作示例
2019/03/06 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
2008/03/22 Javascript
jQuery如何将选中的对象转化为原始的DOM对象
2014/06/09 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
easyui Draggable组件实现拖动效果
2015/08/19 Javascript
JQuery实现的按钮倒计时效果
2015/12/23 Javascript
实例详解jQuery结合GridView控件的使用方法
2016/01/04 Javascript
javascript特殊日历控件分享
2016/03/07 Javascript
JS实现HTML表格排序功能
2016/08/05 Javascript
Jquery遍历select option和添加移除option的实现方法
2016/08/26 Javascript
jQuery插件HighCharts绘制2D饼图效果示例【附demo源码下载】
2017/03/21 jQuery
jquery操作ul的一些操作笔记整理(干货)
2017/08/31 jQuery
基于vue+canvas的excel-like组件实例详解
2017/11/28 Javascript
vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造
2018/09/14 Javascript
JS实现的图片选择顺序切换和循环切换功能示例【测试可用】
2018/12/28 Javascript
React 使用Hooks简化受控组件的状态绑定
2019/03/18 Javascript
详解在Angular4中使用ng2-baidu-map的方法
2019/06/19 Javascript
详解vue为什么要求组件模板只能有一个根元素
2019/07/22 Javascript
讲解Python中运算符使用时的优先级
2015/05/14 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
2019/06/05 Python
基于python实现坦克大战游戏
2020/10/27 Python
KTV的创业计划书范文
2014/02/02 职场文书
安全宣传标语
2014/06/10 职场文书
鼓舞士气的口号
2014/06/16 职场文书
企业转让协议书(范文2篇)
2019/08/15 职场文书
React 并发功能体验(前端的并发模式)
2021/07/01 Javascript
html form表单基础入门案例讲解
2021/07/15 HTML / CSS