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 相关文章推荐
网站被黑的假象--ARP欺骗之页面中加入一段js
May 16 Javascript
一个符号插入器 中用到的js代码
Sep 04 Javascript
Js注册协议倒计时的小例子
Jun 24 Javascript
实现动画效果核心方式的js代码
Sep 27 Javascript
window.location.href中url中数据量太大时的解决方法
Dec 23 Javascript
Node.js实用代码段之获取Buffer对象字节长度
Mar 17 Javascript
jQuery实现的placeholder效果完整实例
Aug 02 Javascript
AngularJS动态加载模块和依赖的方法分析
Nov 08 Javascript
jquery.tableSort.js表格排序插件使用方法详解
Aug 12 Javascript
easyui关于validatebox实现多重规则验证的方法(必看)
Apr 12 Javascript
JS实现百度搜索接口及链接功能实例代码
Feb 02 Javascript
解决antd Form 表单校验方法无响应的问题
Oct 27 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
overlord人气高涨,却被菲利普频繁举报,第四季很难在国内上映
2020/05/06 日漫
简单的自定义php模板引擎
2016/08/26 PHP
PHP正则删除HTML代码中宽高样式的方法
2017/06/12 PHP
PHP让数组中有相同值的组成新的数组实例
2017/12/31 PHP
PHP strripos函数用法总结
2019/02/11 PHP
在js文件中写el表达式取不到值的原因及解决方法
2013/12/23 Javascript
JavaScript基础语法、dom操作树及document对象
2014/12/02 Javascript
jQuery滚动条插件nanoscroller使用指南
2015/04/21 Javascript
jQuery中$.extend()用法实例
2015/06/24 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
总结JavaScript的正则与其他语言的不同之处
2016/08/25 Javascript
jQuery Validate 相关参数及常用的自定义验证规则
2017/03/06 Javascript
javascript实现切割轮播效果
2019/11/28 Javascript
[02:28]DOTA2 2017国际邀请赛小组赛回顾
2017/08/09 DOTA
[01:01:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第一场 3月4日
2021/03/11 DOTA
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
2015/08/16 Python
Python+django实现简单的文件上传
2016/08/17 Python
用Django实现一个可运行的区块链应用
2018/03/08 Python
Python定义二叉树及4种遍历方法实例详解
2018/07/05 Python
python实现雪花飘落效果实例讲解
2019/06/18 Python
Python中bisect的使用方法
2019/12/31 Python
python不到50行代码完成了多张excel合并的实现示例
2020/05/28 Python
python 装饰器的使用示例
2020/10/10 Python
一款纯css3实现的竖形二级导航的实例教程
2014/12/11 HTML / CSS
C,C++的几个面试题小集
2013/07/13 面试题
Prototype如何更新局部页面
2013/03/03 面试题
总经理助理岗位职责
2013/11/08 职场文书
你懂得怎么写自荐信吗?
2013/12/27 职场文书
大学生创业感言
2014/01/25 职场文书
劳动实践课感言
2014/02/01 职场文书
解除劳动合同协议书范本
2014/04/14 职场文书
2014年企业团支部工作总结
2014/12/10 职场文书
小班教师个人总结
2015/02/05 职场文书
MySQL COUNT函数的使用与优化
2021/05/10 MySQL
html+css实现分层金字塔的实例
2021/06/02 HTML / CSS