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将从数据库中读取出来的日期型格式化为想要的类型。
Aug 15 Javascript
JavaScript面向对象之Prototypes和继承
Jul 12 Javascript
jQuery中选择器小问题(新人难免遇到)
Mar 31 Javascript
jQuery设置和获取HTML、文本和值示例
Jul 08 Javascript
Jquery仿IGoogle实现可拖动窗口示例代码
Aug 22 Javascript
5种处理js跨域问题方法汇总
Dec 04 Javascript
JS表单验证的代码(常用)
Apr 08 Javascript
每日十条JavaScript经验技巧(二)
Jun 23 Javascript
js文件中直接alert()中文出来的是乱码的解决方法
Nov 01 Javascript
jQuery使用eraser.js插件实现擦除、刮刮卡效果的方法【附eraser.js下载】
Apr 28 jQuery
vue2 设置router-view默认路径的实例
Sep 20 Javascript
Vue+Bootstrap实现简易学生管理系统
Feb 09 Vue.js
在微信小程序中保存网络图片
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
使用 MySQL 开始 PHP 会话
2006/12/21 PHP
需要发散思维学习PHP
2009/06/29 PHP
PHP漏洞全解(详细介绍)
2012/11/13 PHP
Codeigniter整合Tank Auth权限类库详解
2014/06/12 PHP
php运行时动态创建函数的方法
2015/03/16 PHP
提高 DHTML 页面性能
2006/12/25 Javascript
js文本框输入点回车触发确定兼容IE、FF等
2013/11/19 Javascript
ECMAScript6的新特性箭头函数(Arrow Function)详细介绍
2014/06/07 Javascript
Javascript验证用户输入URL地址是否为空及格式是否正确
2014/10/09 Javascript
使用Jquery实现每日签到功能
2015/04/03 Javascript
JavaScript tab选项卡插件实例代码
2016/02/23 Javascript
Bootstrap框架结合jQuery仿百度换肤功能实例解析
2016/09/17 Javascript
BootStrap3使用错误记录及解决办法
2016/12/22 Javascript
Angularjs上传文件组件flowjs功能
2017/08/07 Javascript
AngularJS中的路由使用及实现代码
2017/10/09 Javascript
Vue2.2.0+新特性整理及注意事项
2018/08/22 Javascript
解决vue 界面在苹果手机上滑动点击事件等卡顿问题
2018/11/27 Javascript
微信小程序页面间跳转传参方式总结
2019/06/13 Javascript
[01:03:56]Mineski vs TNC 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
python中的代码编码格式转换问题
2015/06/10 Python
python实现图像识别功能
2018/01/29 Python
详解pandas库pd.read_excel操作读取excel文件参数整理与实例
2019/02/17 Python
使用python绘制温度变化雷达图
2019/10/18 Python
python 一维二维插值实例
2020/04/22 Python
CSS3 实现童年的纸飞机
2019/05/05 HTML / CSS
HTML5通过navigator.mediaDevices.getUserMedia调用手机摄像头问题
2020/04/27 HTML / CSS
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
铲车司机岗位职责
2014/03/15 职场文书
中层领导干部群众路线对照检查材料思想汇报
2014/10/02 职场文书
聘任证明怎么写
2015/03/02 职场文书
学校教学管理制度
2015/08/06 职场文书
大学生党课感想
2015/08/11 职场文书
导游词范文之颐和园/重庆/云台山
2019/09/10 职场文书
安装pytorch时报sslerror错误的解决方案
2021/05/17 Python
5种方法告诉你如何使JavaScript 代码库更干净
2021/09/15 Javascript
Java对文件的读写操作方法
2022/04/29 Java/Android