vue 传参iframe

vue3 正确通信方式

一、内嵌iframe

既然两个项目中有共通的内容 就少不了互相通信。核心的两个方法是 传值:postMessage() 和
接收值:addEventListener()。

<template>
    <iframe  id="iframe" @load="sendMessage" src="http://localhost:8080" width="100%" height="100%" frameborder="0"></iframe>
</template>

vue 项目iframe 相互传值这个项目是vue3
二、iframe传参


<script lang="ts" setup>
import { ref, onMounted, onUnmounted } from 'vue'
let iframe: any =null // 绑定iframe标签ref
onMounted(() => {
  // message 该事件通过或者从对象(WebSocket, Web Worker, Event Source 或者子 frame 或父窗口)接收到消息时触发
  window.addEventListener('message', payEvent)
})
// 传递参数到iframe
const sendMessage = (e: any) => {
  iframe = document.querySelector('#iframe')
  iframe.contentWindow.postMessage("token", "*")
  
}
// i接收frame参数
const payEvent = (event: any) => {
  console.log(event);
  if (event.data) {
    // payShow.value = event.data.judge
  }
}
//卸载事件
onUnmounted(() => {
  window.removeEventListener('message', payEvent)
})
</script>

三、接收参数

vue3

<template>
 <div> 我只iframe项目</div>
</template>
<script setup lang="ts">
import {  onMounted,onUnmounted } from "vue";
onMounted(() => {
  //向父项目传值 
  window.parent.postMessage("hello,我即将传给父项目", "*");

  //绑定事件接收父项目传来的值
  window.addEventListener("message", handleMessage);
});
//卸载事件
onUnmounted(() => {
  window.removeEventListener('message', handleMessage)
})
const handleMessage = (event: any) => {
  console.log("这里是父项目传来的值", event.data);
};
</script>
 

vue2

created() {
		window.parent.postMessage("hello,我即将传给父项目", "*");
		//卸载
      window.removeEventListener('message', this.init)
      //挂载
      window.addEventListener('message', this.init)
  },
  methods: {
        init(e) {
            console.log(e, 'editor')
        },
 }

如果typescript使用 window创建方法报错的话,请在项目src或者根目录下新建(xxx.d.ts)如(typings.d.ts)文件

declare interface Window {
  XXX: any
}

iframe的传参与接收参数到此完成,最后记得页面关闭时移除监听事件。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
根据提供的引用内容,可以看出问题分为两个部分:Vue路由传参Vue中数据显示NAN的问题。下面将分别回答这两个问题。 1. Vue路由传参 Vue路由传参可以通过在路由路径中添加参数来实现。例如,我们可以在路由路径中添加一个参数id,如下所示: ```javascript { path: '/user/:id', component: User } ``` 在组件中,我们可以通过$router对象的params属性来获取路由参数。例如,在User组件中,我们可以通过this.$route.params.id来获取id参数的值。 如果需要在组件之间传递数据,我们可以使用props属性。例如,在父组件中,我们可以通过props属性向子组件传递数据,如下所示: ```javascript <template> <div> <child :message="message"></child> </div> </template> <script> import Child from './Child.vue' export default { components: { Child }, data () { return { message: 'Hello World!' } } } </script> ``` 在子组件中,我们可以通过props属性来接收父组件传递的数据,如下所示: ```javascript <template> <div> {{ message }} </div> </template> <script> export default { props: { message: String } } </script> ``` 2. Vue中数据显示NAN的问题 根据提供的引用内容,可以看出问题出在过滤器上。在Vue中,过滤器可以用来格式化数据。在过滤器中,我们可以通过参数来接收需要格式化的数据。例如,在过滤器中,我们可以通过value参数来接收需要格式化的数据。 根据提供的引用内容,可以看出问题出在过滤器中对时间戳进行格式化时出现了问题。具体原因可能是过滤器中的代码有误,导致格式化后的数据为NaN。解决这个问题的方法是检查过滤器中的代码,确保代码正确。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值