Javascript 只在组件Vue.js上运行一次mounted()
我有两个组件可以有条件地使用Javascript 只在组件Vue.js上运行一次mounted(),javascript,vue.js,vue-component,Javascript,Vue.js,Vue Component,我有两个组件可以有条件地使用v-if进行渲染: <Element v-if="this.mode === 'mode'"/> <OtherElement v-if="this.mode !== 'mode'"/> 我在mounted()下加载了两个组件的动画,我只想在第一次加载它们时运行它们。但是,使用mounted,每当此.mode更改时重新创建组件时,动画将再次触发。如何避免这种情况?如果created()不起作用,您应该尝试在父元素中做一个简单的检查,检查th
v-if
进行渲染:
<Element v-if="this.mode === 'mode'"/>
<OtherElement v-if="this.mode !== 'mode'"/>
我在
mounted()
下加载了两个组件的动画,我只想在第一次加载它们时运行它们。但是,使用mounted,每当此.mode
更改时重新创建组件时,动画将再次触发。如何避免这种情况?如果created()不起作用,您应该尝试在父元素中做一个简单的检查,检查this.mode是否在之前打开和关闭,将结果保存为变量并将其传递给挂载的挂钩,并且仅在模式未在之前切换的情况下运行动画。使用v-If
,每当this.mode
更改时,重新呈现组件。Vue将它们存储在虚拟DOM中,但如果使用v-if
,则会重新渲染它们
如果您可以访问这些组件的代码,请考虑使用<代码> PROP>代码> <代码> V-Studio并观看它,可选地与
<template>
<div v-show="mode === 'themode'">
</div>
</template>
<script>
export default {
props: {
mode: {
type: Boolean,
required: true,
twoWay: true
},
},
data() {
return {
animationLoaded : false,
}
},
mounted(){
},
watch: {
'mode' : function(){
if(this.mode === 'mode' && this.animationLoaded === false){
//load animation and set flag to true, to avoid loading it again.
this.animationLoaded = true;
this.$root.$emit('component-name:animation-loaded');
}
}
},
导出默认值{
道具:{
模式:{
类型:布尔型,
要求:正确,
双向:对
},
},
数据(){
返回{
animationLoaded:false,
}
},
安装的(){
},
观察:{
“模式”:函数(){
if(this.mode=='mode'&&this.animationLoaded===false){
//加载动画并将flag设置为true,以避免再次加载动画。
this.animationLoaded=true;
这是.$root.$emit('component-name:animation-loaded');
}
}
},
并将子组件放入父组件中:
<child-component :mode.sync="mode"></child-component>
您可以将组件包装在
保持活动的元素中
<keep-alive>
<Element v-if="this.mode === 'mode'"/>
<OtherElement v-else />
</keep-alive>
我有一个类似的问题,我只想在我的挂载的
中的某个东西在页面加载时运行,但是当我离开(使用vue路由器)并再次返回时,挂载的
每次都会运行,重新运行该代码。解决方案:我放置一个窗口。addEventListener('load',()=>{})
中创建的
函数,该函数将运行该代码
创建的created
函数在vue引导过程的早期运行,而window.load
事件是页面加载队列中的最后一个事件。由于vue作为单个页面应用程序运行,因此window.load
事件只会触发一次,并且只有在所有javascript(包括vue)都启动并运行之后才会触发(在某种意义上)我可以在我的环境中来回路由,因为我知道初始构建脚本只有在页面实际重新加载时才会运行
我觉得有一种更有效的方法可以做到这一点,或者我错过了vue terans可能会责骂我的东西,但在这一点上,vue打了我很多次手腕,我再也不想尝试了。这是一种很难解决的方法!你能访问和编辑这些组件吗?