Laya中嵌入iframe并通信,接收发送数据

Laya项目中要做一套类似表格的页面,负责收集数据,如果用laya的写法,个人感觉很麻烦,于是想采用laya中嵌套iframe的方法,然后将laya中的默认数据传到iframe中,作为默认数据填充,然后当iframe中数据更改后,点击提交按钮,再把iframe收集到的数据回传到laya,就此完成两者的通信.

如上图

//Laya(ts)界面部分代码
init(){
    //将 html文件夹和资源放到bin目录的res下,然后src引用
    let iframe.src = "res/report/index.html";
    //设置 iframe 的id,后面便于通过getElementById引用
    iframe.id = "report";
    //一些iframe的样式自己设置一下,然后添加到Laya.Browser.document.body中
    Laya.Browser.document.body.appendChild(iframe);
    // 确保 iframe 加载完成,不然监听会有问题,也可以设置延时函数
    iframe.onload = (e) => {
    Laya.Browser.document.getElementById("report").contentWindow.document.addEventListener("ToOuter", (e) => {
    //addEventListener 是对dom的监听,如果监听contentWindow.是一个window,所以监听不到
        console.log("Laya 接收数据:", e.detail);
      });
      this.sendMessage("formData", fomrData);
    };
}

public sendMessage(msgName, msgData) {
    //向名称为report的iframe中发送数据的方法,在上面调用
    const iframeWindow = Laya.Browser.document.getElementById("report").contentWindow;
    //这里通信的方法,是在html中定义一个接受消息的方法,然后通过window.xx方法去调用
    iframeWindow.getMsg(msgName, msgData);
}
//html的部分代码
mounted() {
    //此处是加载了在html中引入了vue.js,所以需要将getMsg方法挂载到window上,如果不挂载,那么Laya中就无法通过window对象使用html中的方法
   window.getMsg = this.getMsg;
},
methods: {
   onSubmitForm() {
        //iframe中的提交操作,
       var event = new CustomEvent("ToOuter", { detail: this.form });
       document.dispatchEvent(event);
    },
    //iframe中默认获取Laya传过来的数据方法
   getMsg(name, data) {
       console.log("html 接收数据:" + name, data);
   },
},

 如图就可以正常通信了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Laya 使用 ListView 实现数据高度不同的列表,可以通过 `itemRender` 方法来实现。 首先,我们需要在 ListView 的属性设置 `renderHandler` 方法,该方法会在 ListView 的每个 item 被创建时调用。在 `renderHandler` 方法,我们可以创建 item 的视图,并设置 item 的数据。具体代码如下: ```javascript // 创建 ListView var list = new Laya.List(); list.width = 300; list.height = 400; list.itemRender = Item; list.renderHandler = new Laya.Handler(this, onRender); this.addChild(list); // renderHandler 方法 function onRender(item, index) { // 设置 item 的数据 item.setData(data[index]); // 设置 item 的高度 item.height = item.getData().height; } // Item 类 var Item = (function(_super) { function Item() { Item.__super.call(this); this.init(); } Laya.class(Item, "Item", _super); Item.prototype.init = function() { // 创建 item 的视图 // ... }; Item.prototype.setData = function(data) { // 设置 item 的数据 // ... }; Item.prototype.getData = function() { // 获取 item 的数据 // ... }; return Item; })(Laya.Box); ``` 在上面的代码,`Item` 类代表 ListView 的每个 item,我们在 `init` 方法创建 item 的视图,在 `setData` 方法设置 item 的数据,在 `getData` 方法获取 item 的数据。 在 `onRender` 方法,我们根据数据的高度设置 item 的高度,这样 ListView 的每个 item 的高度就会不同。 另外,我们还需要在 ListView 的属性设置 `scrollBar` 为 `null`,这样 ListView 就不会出现滚动条。如果需要滚动条,可以使用 Laya 的 ScrollBar 组件来实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值