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 相关文章推荐
document 和 document.all 分别什么时候用
Jun 22 Javascript
javascript dom 操作详解 js加强
Jul 13 Javascript
JS获得URL超链接的参数值实例代码
Jun 21 Javascript
jquery实现二级导航下拉菜单效果
Dec 18 Javascript
Bootstrap每天必学之工具提示(Tooltip)插件
Apr 26 Javascript
JavaScript函数节流的两种写法
Apr 07 Javascript
浅谈Node.js CVE-2017-14849 漏洞分析(详细步骤)
Nov 10 Javascript
Angular2使用vscode断点调试ts文件的方法
Dec 13 Javascript
11行JS代码制作二维码生成功能
Mar 09 Javascript
jQuery实现网页拼图游戏
Apr 22 jQuery
微信小程序五子棋游戏的棋盘,重置,对弈实现方法【附demo源码下载】
Feb 20 Javascript
vue-quill-editor 自定义工具栏和自定义图片上传路径操作
Aug 03 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 goto语句简介和使用实例
2014/03/11 PHP
CI(CodeIgniter)模型用法实例分析
2016/01/20 PHP
win10环境PHP 7 安装配置【教程】
2016/05/09 PHP
PHP实现获取第一个中文首字母并进行排序的方法
2017/05/09 PHP
laravel 5.3 单用户登录简单实现方法
2019/10/14 PHP
jquery实现的元素的left增加N像素 鼠标移开会慢慢的移动到原来的位置
2010/03/21 Javascript
js从10种颜色中随机取色实现每次取出不同的颜色
2013/10/23 Javascript
JS 操作Array数组的方法及属性实例解析
2014/01/08 Javascript
node.js使用npm 安装插件时提示install Error: ENOENT报错的解决方法
2014/11/20 Javascript
浅析Node.js中的内存泄漏问题
2015/06/23 Javascript
JavaScript文本框脚本编写的注意事项
2016/01/25 Javascript
基于JSON格式数据的简单jQuery幻灯片插件(jquery-slider)
2016/08/10 Javascript
vue-router2.0 组件之间传参及获取动态参数的方法
2017/11/10 Javascript
JS与jQuery判断文本框还剩多少字符可以输入的方法
2018/09/01 jQuery
微信小程序canvas拖拽、截图组件功能
2018/09/04 Javascript
npm 常用命令详解(小结)
2019/01/17 Javascript
详解Nodejs get获取远程服务器接口数据
2019/03/26 NodeJs
vue data引入本地图片的两种方式小结
2019/11/13 Javascript
vue-cli4.x创建企业级项目的方法步骤
2020/06/18 Javascript
Python实现对PPT文件进行截图操作的方法
2015/04/28 Python
Python3遍历目录树实现方法
2015/05/22 Python
批量将ppt转换为pdf的Python代码 只要27行!
2018/02/26 Python
spark: RDD与DataFrame之间的相互转换方法
2018/06/07 Python
python实现图片批量压缩程序
2018/07/23 Python
Python3.4 splinter(模拟填写表单)使用方法
2018/10/13 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
2019/06/21 Python
Python3.7下安装pyqt5的方法步骤(图文)
2020/05/12 Python
python实现数据结构中双向循环链表操作的示例
2020/10/09 Python
python快速安装OpenCV的步骤记录
2021/02/22 Python
css3实现一款模仿iphone样式的注册表单
2013/03/20 HTML / CSS
乐天旅游台湾网站:Rakuten Travel TW
2017/06/01 全球购物
升职自荐信范文
2013/10/05 职场文书
工商干部先进事迹
2014/05/14 职场文书
2014年教师节红领巾广播稿
2014/09/10 职场文书
信贷客户经理岗位职责
2015/04/09 职场文书
2015年组织委员工作总结
2015/04/23 职场文书