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 相关文章推荐
用正则表达式替换图片地址img标签
Nov 22 Javascript
JS阻止用户多次提交示例代码
Mar 26 Javascript
js实现仿百度风云榜可重复多次调用的TAB切换选项卡效果
Aug 31 Javascript
angularjs表格分页功能详解
Jan 21 Javascript
AngularJS入门教程之数据绑定原理详解
Nov 02 Javascript
Bootstrap中定制LESS-颜色及导航条(推荐)
Nov 21 Javascript
Bootstrap Table使用整理(一)
Jun 09 Javascript
Bootstrap Table使用整理(二)
Jun 09 Javascript
jQuery的时间datetime控件在AngularJs中的使用实例(分享)
Aug 17 jQuery
微信小程序全局变量功能与用法详解
Jan 22 Javascript
Vue 解决路由过渡动画抖动问题(实例详解)
Jan 05 Javascript
vue-以文件流-blob-的形式-下载-导出文件操作
Aug 07 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 开发环境配置(Zend Server安装)
2010/04/28 PHP
PHP文件管理之实现网盘及压缩包的功能操作
2017/09/20 PHP
php通过header发送自定义数据方法
2018/01/18 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
jQuery 学习6 操纵元素显示效果的函数
2010/02/07 Javascript
Javascript Jquery 遍历Json的实现代码
2010/03/31 Javascript
javascript中的document.open()方法使用介绍
2013/10/09 Javascript
浅析tr的隐藏和显示问题
2014/03/05 Javascript
JavaScript实现找出字符串中第一个不重复的字符
2014/09/03 Javascript
jquery和js实现对div的隐藏和显示方法
2014/09/26 Javascript
jQuery匹配文档链接并添加class的方法
2015/06/26 Javascript
js判断子窗体是否关闭的方法
2015/08/11 Javascript
Jquery通过ajax请求NodeJS返回json数据实例
2016/11/08 NodeJs
详谈for循环里面的break和continue语句
2017/07/20 Javascript
Vue利用canvas实现移动端手写板的方法
2018/05/03 Javascript
4个顶级开源JavaScript图表库
2018/09/29 Javascript
详解基于React.js和Node.js的SSR实现方案
2019/03/21 Javascript
vue 父组件中调用子组件函数的方法
2019/06/06 Javascript
Vue中通过Vue.extend动态创建实例的方法
2019/08/13 Javascript
javascript 构建模块化开发过程解析
2019/09/11 Javascript
javascript刷新父页面方法汇总详解
2019/10/10 Javascript
[01:27:30]LGD vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
Python深入学习之特殊方法与多范式
2014/08/31 Python
10 分钟快速入门 Python3的教程
2019/01/29 Python
python3实现用turtle模块画一棵随机樱花树
2019/11/21 Python
使用PyCharm安装pytest及requests的问题
2020/07/31 Python
测控技术与通信工程毕业生自荐信范文
2013/12/28 职场文书
2014迎新年晚会策划方案
2014/02/23 职场文书
秸秆管理实施方案
2014/03/15 职场文书
社会公德演讲稿
2014/05/20 职场文书
校庆活动策划方案
2014/06/05 职场文书
班组拓展活动方案
2014/08/14 职场文书
教育系统干部作风整顿心得体会
2014/09/09 职场文书
能用CSS实现的就不要麻烦JavaScript了
2021/10/05 HTML / CSS
python利用while求100内的整数和方式
2021/11/07 Python
Android RecyclerView实现九宫格效果
2022/06/28 Java/Android