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 相关文章推荐
Jquery ajaxStart()与ajaxStop()方法(实例讲解)
Dec 18 Javascript
javascript动态创建链接的方法
May 13 Javascript
JavaScript实现网页加载进度条代码超简单
Sep 21 Javascript
js canvas仿支付宝芝麻信用分仪表盘
Nov 16 Javascript
实现JavaScript高性能的数据存储
Dec 11 Javascript
js实现微博发布小功能
Jan 12 Javascript
利用Angular+Angular-Ui实现分页(代码加简单)
Mar 10 Javascript
vue中多个倒计时实现代码实例
Mar 27 Javascript
Vue对象赋值视图不更新问题及解决方法
Jun 03 Javascript
Vue项目中ESlint规范示例代码
Jul 04 Javascript
js实现旋转的星空效果
Nov 01 Javascript
使用vuex存储用户信息到localStorage的实例
Nov 11 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 Ctemplate引擎开发相关内容
2012/03/03 PHP
Yii开启片段缓存的方法
2016/03/28 PHP
100多行PHP代码实现socks5代理服务器[2]
2016/05/05 PHP
JS类的封装及实现代码
2009/12/02 Javascript
一个不错的字符串转码解码函数(自写)
2014/07/31 Javascript
删除Javascript Object中间的key
2014/11/18 Javascript
详谈jQuery操纵DOM元素属性 attr()和removeAtrr()方法
2015/01/22 Javascript
在AngularJS中使用AJAX的方法
2015/06/17 Javascript
javascript实现密码验证
2015/11/10 Javascript
js实现select下拉框菜单
2015/12/08 Javascript
BootStrap文件上传样式超好看【持续更新】
2016/05/10 Javascript
JQuery解析XML数据的几个简单实例
2016/05/18 Javascript
JQuery对ASP.NET MVC数据进行更新删除
2016/07/13 Javascript
详解获取jq ul第一个li定位的四种解决方案
2016/11/23 Javascript
Node.js学习之查询字符串解析querystring详解
2017/09/28 Javascript
js 取消页面可以选中文字的功能方法
2018/01/02 Javascript
mpvue中使用flyjs全局拦截的实现代码
2018/09/13 Javascript
JavaScript ES6箭头函数使用指南
2018/12/30 Javascript
javascript 模块依赖管理的本质深入详解
2020/04/30 Javascript
JavaScript类的继承多种实现方法
2020/05/30 Javascript
Python中optionParser模块的使用方法实例教程
2014/08/29 Python
python自动化测试之从命令行运行测试用例with verbosity
2014/09/28 Python
安装Python的web.py框架并从hello world开始编程
2015/04/25 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
2017/08/05 Python
对python字典过滤条件的实例详解
2019/01/22 Python
python DataFrame 取差集实例
2019/01/30 Python
python help函数实例用法
2020/12/06 Python
详解css3 object-fit属性
2018/07/27 HTML / CSS
CSS3利用text-shadow属性实现多种效果的文字样式展现方法
2016/08/25 HTML / CSS
技术合作协议书范本
2014/04/18 职场文书
竞选学生会演讲稿
2014/04/25 职场文书
争做文明公民倡议书
2014/08/29 职场文书
办公室岗位职责
2015/02/04 职场文书
记者节感言
2015/08/03 职场文书
【海涛dota解说】一房久违的影魔魂守二连发
2022/04/01 DOTA
JS轻量级函数式编程实现XDM二
2022/06/16 Javascript