From 3d3362e4300d49db23de48575d26c8d501fdbfd8 Mon Sep 17 00:00:00 2001 From: Tevin <tingquanren@163.com> Date: Fri, 20 Aug 2021 18:52:00 +0800 Subject: [PATCH] 优化跨端通讯机制,实现从全局接收App通知,并通知页面 --- bases/Pilot.js | 33 +++++++++++++++++++++++++++++++-- 1 files changed, 31 insertions(+), 2 deletions(-) diff --git a/bases/Pilot.js b/bases/Pilot.js index 640660a..d7d3966 100644 --- a/bases/Pilot.js +++ b/bases/Pilot.js @@ -3,6 +3,7 @@ * @author Tevin */ +import Taro, { getCurrentInstance } from '@tarojs/taro'; import { Fetcher } from './Fetcher'; import { Tools } from '@components/common/Tools'; import project from '@project'; @@ -37,9 +38,9 @@ if (typeof dataAdd.assets !== 'undefined') { dataAdd.assets = Pilot.transAssets(dataAdd.assets); } - // 当有传data值进来,初始值必须带data中的字段 - const dataOrig = this.$data(); options.data = () => { + // 当有传data值进来,初始值必须带data中的字段 + const dataOrig = this.$data(); return { ...dataOrig, ...dataAdd, @@ -52,9 +53,37 @@ options.methods[name] = this[name]; } }); + this._bindTaroPage(options); return options; } + _bindTaroPage(options) { + // 非App内嵌模式,不执行 + if (!project.appHybrid) { + return; + } + // 绑定页面实例到Page + const { onLoad, onUnload, onBridge } = options; + const option2 = { + onLoad() { + const instance = getCurrentInstance(); + instance.page.$component = this; + onLoad && onLoad.call(this); + // 绑定 onBridge 到页面实例 + this.$onBridge = onBridge || (() => { + }); + }, + onUnload() { + const instance = getCurrentInstance(); + delete instance.page.$component; + onUnload && onUnload.call(this); + }, + }; + options.onLoad = option2.onLoad; + options.onUnload = option2.onUnload; + delete options.onBridge; + } + /** * 转换静态图片引用 * @param assets -- Gitblit v1.9.1