Vue-vue中的window.onload=>nextTick


nextTick的作用

相当于window.onload;
使用nextTick就能再组件加载完了以后才运行。

nextTick的使用场景

当改变数据,视图没有按预期渲染时;都应该考虑是否是因为本需要在dom执行完再执行,然而实际却在dom没有执行完就执行了代码,如果是就考虑使用将逻辑放到nextTick中,有的时候业务操作复杂,有些操作可能需要更晚一些执行,放在nextTick中仍然没有达到预期效果,这个时候可以考虑使用setTimeout,将逻辑放到宏任务中。

如何使用

语法:Vue.nextTick([callback, context])
参数:
{Function} [callback]:回调函数,不传时提供promise调用
{Object} [context]:回调函数执行的上下文环境,不传默认是自动绑定到调用它的实例上。

案例一 生命周期函数中的使用

		<div id='app'>
			<h2>{{msg}}</p>
		</div>
		<script>
			var vm = new Vue({
				el: '#app',
				data: {
					msg:"hello"
				},
				methods: {},
				beforeCreate(){
					console.log(this.msg)
					this.$nextTick(()=>{
						console.log(this.msg)
						this.msg="ljy666"
					})
				}
				
			})
		</script>

在这里插入图片描述
可以看到我们直接在beforeCreate中去获取data中的msg是没有定义的,而放在nextTick中就可以获取并更改了

案例二 ECharts引入

直接引入会导致无法获取到box中的宽高

		<script src="https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/vue/2.6.12/vue.js"></script>
		<script src="https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/echarts/5.3.0-rc.1/echarts.js"></script>
	</head>
	<body>
		<style type="text/css">
			.box {
				width: 500px;
				height: 500px;
			}
		</style>
		<div id='app'>
			<div class="box" v-echarts>

			</div>
		</div>
		<script>
			var vm = new Vue({
				el: '#app',
				directives: {
					echarts: {
						inserted(el) {
                           Vue.nextTick(()=>{
							   var myChart = echarts.init(el);
							   let options={
							   	title: {
							   		text: 'Referer of a Website',
							   		subtext: 'Fake Data',
							   		left: 'center'
							   	},
							   	tooltip: {
							   		trigger: 'item'
							   	},
							   	legend: {
							   		orient: 'vertical',
							   		left: 'left'
							   	},
							   	series: [{
							   		name: 'Access From',
							   		type: 'pie',
							   		radius: '50%',
							   		data: [{
							   				value: 1048,
							   				name: 'Search Engine'
							   			},
							   			{
							   				value: 735,
							   				name: 'Direct'
							   			},
							   			{
							   				value: 580,
							   				name: 'Email'
							   			},
							   			{
							   				value: 484,
							   				name: 'Union Ads'
							   			},
							   			{
							   				value: 300,
							   				name: 'Video Ads'
							   			}
							   		],
							   		emphasis: {
							   			itemStyle: {
							   				shadowBlur: 10,
							   				shadowOffsetX: 0,
							   				shadowColor: 'rgba(0, 0, 0, 0.5)'
							   			}
							   		}
							   	}]
							   }
							   myChart.setOption(options)
						   })
						}
					}
				}
			})
		</script>

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在Vue使用window.onload的方法是在mounted生命周期钩子函数使用,因为在这个时候DOM已经加载完成。可以使用window.onload = function(){}或者window.addEventListener('load', function(){})来监听window的load事件,然后在回调函数执行需要的操作。需要注意的是,如果在组件使用window.onload,最好在组件销毁时移除事件监听,避免内存泄漏。 ### 回答2: Vue window.onload 主要被用于在页面加载完成后执行一些操作,例如渲染页面元素,绑定事件等。下面我们来详细了解一下在 Vue 如何使用 window.onload。 在 Vue ,通常是将 window.onload 加入到组件的 mounted 生命周期,即当该组件被挂载到 DOM 完成之后执行。但是需要注意的是,如果在一个应用存在多个组件,那么每个组件都会触发 mounted 生命周期,这就导致 window.onload 事件会多次触发。 为了避免对渲染性能造成不良影响,我们可以使用 v-cloak 指令或者 Vue 自带的 transition 来解决该问题。通过 v-cloak 指令,可以将未编译完成的 Vue 模板隐藏起来,等到渲染完成后再显示出来。而通过 transition,可以在模板渲染完成之后再执行一些动画效果。 另外,在 Vue 使用 window.onload 还需要注意一个问题,即同步的数据并不会在 window.onload 得到更新。因为 window.onload 是在 DOM 加载完毕后执行的,而 Vue 的数据是异步更新的,这就导致同步的数据在 window.onload 事件并没有被渲染出来。因此,我们可以使用 Vue 提供的 nextTick 方法在 DOM 更新完成之后再执行一些操作。 综上所述,在 Vue 使用 window.onload 事件需要注意多种问题,需要结合 Vue 的生命周期、渲染性能、数据更新等多个因素来考虑。在具体的实践,应该灵活运用这些技巧来处理不同的情况。 ### 回答3: Vue是一款流行的JavaScript框架,用于构建响应式的Web应用程序。Vue不能与传统的window.onload事件一起使用,因为Vue应用不是在window.onload事件发生后加载的。相反,Vue应用是在DOM树准备就绪后的Vue实例创建过程加载的。因此,使用window.onload事件加载Vue应用是不必要的。 Vue提供了一种称为“生命周期挂钩”的方式来在特定时刻执行代码。在Vue实例创建并加载期间,Vue提供了一些生命周期钩子,可以在这些钩子编写代码来执行特定的任务。 在Vue,可以使用created或mounted钩子来执行代码。created钩子用于在Vue实例创建后立即执行代码。mounted钩子在Vue实例挂载(即将显示在DOM)后执行代码。如果需要在Vue加载后执行代码,应该使用mounted钩子而不是window.onload事件。 下面是一个使用mounted钩子的示例: ``` <template> <div> <h1>Hello World</h1> </div> </template> <script> export default { mounted() { console.log('Vue app loaded'); // 在这里执行其他任务 } } </script> ``` 在这个Vue组件,当Vue实例加载完毕后,mounted钩子会被调用并执行console.log语句。在此之后,可以在这个钩子执行其他任务。 总之,在Vue,应该使用created或mounted钩子来执行代码,而不是使用window.onload事件。这可以确保在Vue应用程序加载时正确地执行代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

H5_ljy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值