首页 > 其他分享 >vue中,html中调用methods中的方法修改data中的属性值会引起死循环

vue中,html中调用methods中的方法修改data中的属性值会引起死循环

时间:2022-09-27 14:13:03浏览次数:65  
标签:count vue methods html data 属性

问题描述

在引入vue的html页面中,html语句中调用methods中的方法修改data中的属性值,会导致页面陷入死循环。

问题原理

触发条件(二者需都满足)

1:methods中有修改data属性值的方法;
2:html文档里用模板式语法调用了methods:{}里的方法 ;

vue作为mvvm模板,data中的属性值每次修改,都会引起虚拟模板的修改,进而渲染到页面中(即html中),而html被重新渲染后(可以简单理解为对相关的html代码重新执行),又会调用methods中的方法对data中属性值的修改,继而又重复上述过程,至此开始了死循环。

解决办法

1、在vue源码中,vue设定了一个最大更新次数:
var MAX_UPDATE_COUNT = 100;
当循环次数达到100次时终止循环。vue源码中对于循环次数的约定

2、在浏览器中会有请求时长设置,超出一定的时长后也会终止请求。
3、可以将data中相应的属性值赋给一个变量来操作。

实例代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
	</head>
	<body>
		<div id="dv1">
			<h1>{{msg}}</h1>
			<h3>{{num()}}</h3>
			<h3>{{num2}}</h3>
		</div>
		
		<script>
			let vm = new Vue({
				el:"#dv1",
				data:{
					count: 0,
					msg: "this is vue!",
				},
				methods:{
					num(){
						// let a = this.count;
						// a += 1;
						// return a;
						
						return ++this.count;
					}
				},
				computed:{ 		//是计算属性,调用时不需要加()
					num2(){
						this.count += 1;
						return this.count;
					}
				},
			});
		</script>
		
	</body>
</html>

小tips:类似的行为在computed:{}里将不会引起死循环(函数重复调用)。

标签:count,vue,methods,html,data,属性
From: https://www.cnblogs.com/zhp2240872620/p/16734351.html

相关文章

  • Python中dataclass库
    目录dataclass语法一、简介二、装饰器参数三、数据属性1、参数2、使用示例3、注意事项四、其他1、常用函数2、继承3、总结dataclass语法一、简介官方文档的......
  • springboot+vue外卖点餐系统 计科专业毕业设计选题 java餐厅点餐系统 ssm外卖订餐系统
    ......
  • Vue下载excel文件模板
    注意:1.模板一定是英文名2.使用相对于index.html的路径3.a标签同理<a href="./static/template.xlsx" download="模板.xlsx"></a>第一步: vue2.0版本的在项目根目录......
  • vue学习笔记(七):路由
    Vue是单页面的网页程序,只有一个页面,页面中的不同的部分会被替换成不同的组件的内容根据不同的浏览器路径替换不同的组件内容要建立路径和视图之间的关系,即是路由!静态导入,......
  • 简单上手 Vue Router
    VueRouter也随着Vue3的更新来到了4版本,来看一下怎么使用吧!(这里使用的是compositionAPI和TypeScript模式)安装vue-router4npminstallvue-router@4在/src......
  • Vue+Echarts--父组件+子组件(基础)
    基本的思路就是:在父组件获取后端数据,然后传到子组件,子组件创建图表进行展示。1、获取后端数据 2、将数据传给子组件,并将子组件引入到父组件  3、子组件接收数......
  • vscode运行vue项目(vscode插件安装)
    vetureslinAutoCloseTagAutoRenameTagDebuggerforChromeopeninbrowserJavaScript(ES6)codesnippetsPathIntellisenseBracketPairColorizerBetterC......
  • 删除DataTable重复列,类似数据库的Distinct函数。
    将数据表放到内存中进行操作,可以极大的提高效率。///<summary>///删除DataTable重复列,类似distinct///</summary>///<paramna......
  • vue学习笔记(六):EL组件库学习
    安装Element-uinpmielement-ui在main.js中插入引用项importElementfrom'element-ui'import'element-ui/lib/theme-chalk/index.css'在newVue之前插入引用......
  • Vue3之script-setup全面解析(转载)
    可能很多同学(包括我)刚上手Vue3.0之后,都会觉得开发过程似乎变得更繁琐了,Vue官方团队当然不会无视群众的呼声,如果你基于脚手架和.vue文件开发,那么可以享受到更高效率......