如何解决在vue中嵌入iframe时父子页面通讯过程中获取this.$refs.testFrame==null?
时间: 2023-11-28 12:48:47 浏览: 80
在Vue中嵌入iframe时,可能会出现获取父页面的this.$refs.testFrame为null的情况。这是由于Vue的异步更新机制导致的。
解决方法如下:
1. 在父组件的mounted钩子函数中使用setTimeout函数将获取this.$refs.testFrame的代码延迟执行,等待Vue异步更新完成后再执行。
```
mounted() {
setTimeout(() => {
console.log(this.$refs.testFrame);
}, 0);
}
```
2. 在iframe的onload事件中,将iframe的window对象存储到父组件的data中,并在父组件中使用watch监听该值的变化。
```
<template>
<div>
<iframe ref="testFrame" src="https://www.example.com" @load="iframeLoaded"></iframe>
</div>
</template>
<script>
export default {
data() {
return {
iframeWin: null,
};
},
methods: {
iframeLoaded() {
this.iframeWin = this.$refs.testFrame.contentWindow;
},
},
watch: {
iframeWin() {
console.log(this.$refs.testFrame);
},
},
};
</script>
```
通过以上两种方法,可以解决在Vue中嵌入iframe时父子页面通讯过程中获取this.$refs.testFrame为null的问题。
阅读全文