From e5177334aa03fc417e26cf8e7ff9e200eda2eef6 Mon Sep 17 00:00:00 2001 From: liaoxuezhi Date: Wed, 11 Dec 2019 11:18:20 +0800 Subject: [PATCH] =?UTF-8?q?iframe=20=E4=B8=8E=E5=88=AB=E7=9A=84=E7=BB=84?= =?UTF-8?q?=E4=BB=B6=E9=80=9A=E4=BF=A1=E9=80=BB=E8=BE=91=E8=A1=A5=E5=85=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/renderers/IFrame.tsx | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/src/renderers/IFrame.tsx b/src/renderers/IFrame.tsx index 46025bcb..7e3fabed 100644 --- a/src/renderers/IFrame.tsx +++ b/src/renderers/IFrame.tsx @@ -1,8 +1,9 @@ import React from 'react'; import {Renderer, RendererProps} from '../factory'; import {filter} from '../utils/tpl'; -import {autobind} from '../utils/helper'; +import {autobind, createObject} from '../utils/helper'; import {ScopedContext, IScopedContext} from '../Scoped'; +import {buildApi} from '../utils/api'; export interface IFrameProps extends RendererProps { className?: string; @@ -19,10 +20,34 @@ export default class IFrame extends React.Component { frameBorder: 0 }; + // 当别的组件通知 iframe reload 的时候执行。 @autobind - reload() { - (this.IFrameRef.current as HTMLIFrameElement).src = (this.IFrameRef - .current as HTMLIFrameElement).src; + reload(subpath?: any, query?: any) { + if (query) { + return this.receive(query); + } + + const {src, data} = this.props; + + if (src) { + (this.IFrameRef.current as HTMLIFrameElement).src = buildApi( + src, + data + ).url; + } + } + + // 当别的组件把数据发给 iframe 里面的时候执行。 + @autobind + receive(values: object) { + const {src, data} = this.props; + + if (src) { + (this.IFrameRef.current as HTMLIFrameElement).src = buildApi( + src, + createObject(data, values) + ).url; + } } render() { @@ -41,7 +66,7 @@ export default class IFrame extends React.Component { frameBorder={frameBorder} style={style} ref={this.IFrameRef} - src={src ? filter(src, data) : undefined} + src={src ? buildApi(src, data).url : undefined} /> ); }