Vue 重置组件到初始状态的方法示例


Posted in Javascript onOctober 10, 2018

Vue

通过直接强制刷新 DOM 来达到重置组件的效果,这样可以重置一些组件的动画以及组件内初始的数据

强制重新生成 DOM 的实现

原理:强制重新生成 DOM 可以通过 Vue 中的 key 来实现。在 Vue 更新 Dom 时,如果 key 值相同则会对原有组件进行复用,如果不同,则会重新生成。

代码示例:

每次点击 refresh 按钮,Demo 组件都会重新生成

组件:

/**
 * Demo.vue
 */
<template>
 <div>Demo</div>
</template>
<script>
 export default {
  data () {
   return {}
  },
  created: function () {
   console.log('created')
  }
 }
</script>

主页面:

/**
 * Index.vue
 */
<template>
 <div>
 <Demo :key="id"></Demo>
 <button @click="refresh">refresh</button>
 </div>
</template>
<script>
 import Demo from './Demo'
 export default {
  data () {
   return {
    id: +new Date()
   }
  },
  methods: {
    refresh: function () {
    this.id = +new Date()
   }
  },
  components: {
   Demo
  }
 }
</script>

注:

对 +new Date() 的说明:
4 个结果一样,都是返回当前时间的毫秒数
alert(+new Date())
alert(+new Date)
var a=new Date()
alert(a.valueOf())
alert(a.getTime())

补充:vue强制刷新组件

把一个组件重置到初始状态是一个常见的需求,推荐的做法有两种,一种是父组件重置子组件的 prop,另一种是子组件暴露一个重置的方法供父组件调用。但有些时候,子组件既没有提供重置的方法,也没提供 prop 来重置自己的状态。更重要的是,这个子组件我们还动不了。于是我们就需要一种 hack 的方式来强制子组件重置到初始状态。方法如下:

<component v-if="hackReset"></component>

this.hackReset = false
this.$nextTick(() => {
this.hackReset = true
})

v-if 在切换时,元素及它的绑定数据和组件都会被销毁并重建

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery 获取对象 定位子对象
May 31 Javascript
javascript/jquery获取地址栏url参数的方法
Mar 05 Javascript
javascript最基本的函数汇总
Jun 25 Javascript
酷! 不同风格页面布局幻灯片特效js实现
Feb 19 Javascript
微信小程序 上传头像的实例详解
Oct 27 Javascript
详解基于vue-cli配置移动端自适应
Jan 13 Javascript
解决vue页面DOM操作不生效的问题
Mar 17 Javascript
vue权限管理系统的实现代码
Jan 17 Javascript
如何自动化部署项目?折腾服务器之旅~
Apr 16 Javascript
vue实现一拉到底的滑动验证
Jul 25 Javascript
解决vue 子组件修改父组件传来的props值报错问题
Nov 09 Javascript
原生JS实现微信通讯录
Jun 18 Javascript
15个顶级开源JavaScript框架和库
Oct 10 #Javascript
使用Angular 6创建各种动画效果的方法
Oct 10 #Javascript
js 实现在2d平面上画8的方法
Oct 10 #Javascript
从零开始用electron手撸一个截屏工具的示例代码
Oct 10 #Javascript
js正则取值的结果数组调试方法
Oct 10 #Javascript
webpack dll打包重复问题优化的解决
Oct 10 #Javascript
4个顶级JavaScript高级文本编辑器
Oct 10 #Javascript
You might like
Discuz! 5.0.0论坛程序中加入一段js代码,让会员点击下载附件前自动弹出提示窗口
2007/04/18 PHP
php smarty函数扩展
2010/03/15 PHP
php求两个目录的相对路径示例(php获取相对路径)
2014/03/27 PHP
smarty模板引擎从php中获取数据的方法
2015/01/22 PHP
php无限级分类实现方法分析
2016/10/19 PHP
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
2010/04/27 Javascript
Node.js开发指南中的简单实例(mysql版)
2013/09/17 Javascript
Javascript实现颜色rgb与16进制转换的方法
2015/04/18 Javascript
JavaScript 函数的执行过程
2016/05/09 Javascript
AngularJS模仿Form表单提交的实现代码
2016/12/08 Javascript
浅谈JS如何实现真正的对象常量
2017/06/25 Javascript
angular2模块和共享模块详解
2018/04/08 Javascript
详解JavaScript 中 if / if...else...替换方式
2018/07/15 Javascript
vue实现循环滚动列表
2020/06/30 Javascript
快速解决element的autofocus失效问题
2020/09/08 Javascript
Python 错误和异常小结
2013/10/09 Python
gearman的安装启动及python API使用实例
2014/07/08 Python
python验证码识别的实例详解
2016/09/09 Python
Python GUI布局尺寸适配方法
2018/10/11 Python
python读取xlsx的方法
2018/12/25 Python
Python判断变量名是否合法的方法示例
2019/01/28 Python
Python实现连接MySql数据库及增删改查操作详解
2019/04/16 Python
Python实现的文轩网爬虫完整示例
2019/05/16 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
2019/08/07 Python
python数据类型可变不可变知识点总结
2020/03/06 Python
如何在scrapy中集成selenium爬取网页的方法
2020/11/18 Python
python解包用法详解
2021/02/17 Python
可爱的童装和鞋子:Fabkids
2019/08/16 全球购物
德国亚马逊官方网站:Amazon.de
2020/11/15 全球购物
第二课堂活动总结
2014/05/07 职场文书
平安家庭示范户事迹
2014/06/02 职场文书
解除劳动合同协议书范本
2014/09/13 职场文书
致运动员加油稿
2015/07/21 职场文书
大学班干部竞选稿
2015/11/20 职场文书
幽默导游词应该怎么写?
2019/08/26 职场文书
Python手拉手教你爬取贝壳房源数据的实战教程
2021/05/21 Python