精华内容
下载资源
问答
  • 动态创建组件 说说场景先,比我写了一些组件,这此组件内容都很少,弹出的对话框也许只有一行数据,也有可能是一个表单等,或都一些多选的,单选的选项等。 网上有好多,动态创建组件的Demo,都不是很满意,愿意就是...

    动态创建组件

    • 说说场景先,比我写了一些组件,这此组件内容都很少,弹出的对话框也许只有一行数据,也有可能是一个表单等,或都一些多选的,单选的选项等。

    • 网上有好多,动态创建组件的Demo,都不是很满意,愿意就是要动态创建组件的时候,传入的你即将要创建的组件对象进去,然后把这个放到页面里显示出来。这算什么动态创建呀,我就想传一个组件的名字,然后就能把他创建出来。

    • 之前写过C#动态创建类,都是给一个类的名称,然后通过反射将类创建出来,然后能过接口过滤转成接口调用方法或, invoke 某个方法等进行操作。像这种才是我想要的效果。

    • 给个名称,然后就把这个组件创建出来,通过输入一些参数对创建出来的组件进行赋值,输出一些参数(主就输出是事件了,比较点击组件上的按钮触发相应的事件等)。

    说了这么多,先来个例子吧。
    这里写图片描述
    上面那张图很简单就是一个输入文本的一个弹框。

    下面这个就有点复杂了,有数据传入,事件绑定等
    这里写图片描述

    主了调用起来方便,我把这些都封装成了一个方法:三个参数

    • 要创建的组件名称
    • 要传入组件的参数
    • 组件输出的事件
       Utility.$ShowDialogComponent('ComponentName', {
          Params1,Params2...
        }, {
           onEventName1:()=>{},
           ...
        });

    由于我动态创建的组件都是以弹框形式出来,所以我把动态创建的步骤放到了,弹框组件里。

    创建Dialog.ts,文件,

    @Component({
      selector: 'xtn-mode-dialog',
      templateUrl: './Dialog.html',
      styleUrls: ['./Dialog.scss'],
      animations: [  // 弹框的添加一个动画效果,由小到大显示,关闭时候,由大小到最后不见了。
        trigger('TriggerState', [
          state('inactive', style({ transform: 'scale(0.1)' })),
          state('active', style({ transform: 'scale(1)' })),
          transition('inactive => active', animate('150ms ease-in')),
          transition('active => inactive', animate('150ms ease-out')),
        ])
      ]
    })
    export class XtnDialog implements OnInit, OnDestroy, OnChanges, AfterContentChecked, AfterContentInit {
       // 依赖注入动态创建组件的工厂类
       constructor(private resolver: ComponentFactoryResolver) {
       }
       // 内容检查,主要是判断是打开还是关闭弹框。
       ngAfterContentChecked(): void {}
       // 销毁操作
       ngOnDestroy(): void {}
       // 这里就是动态创建的组件地方法
       LoadComponent(self:any){}
       ngAfterContentInit(): void {}
       ....
    }
    

    就不把代码张贴里了,查看全部代码可以点击这里展示出几个方法吧,具体详情可能点击

    展开全文
  • 易语言动态创建窗口组件,用最低的资源创建多变的程序界面。
  • C#解决 动态创建库、动态创建

    千次阅读 热门讨论 2014-11-29 18:45:47
    最近在做高校平台,这个系统可以被多个学校使用。... 动态创建库可以解决这种问题。 而在子系统(考试系统)里面,在题型管理模块,由于题型的数量众多,而且数据库表内容位置。所以采用动态创建数据表来解决此问题。

        在1110号。我们开始着手做高校平台这个项目,这个项目里面,有很多的子系统。权限系统、基础系统、考试系统……

       既然是高校平台,当然不只是一个学校用的,可以很多的学校公用。既然如此,每个学校所要保存的数据当然不可能存放在一个库中。一个学校一个库,那么有几个学校用呢?未知。库的数量得视情况而定。动态创建库可以解决这种问题。

     

       当然,系统有很多。但是个人只是参与子系统的开发。在之前一直在考试系统里面打杂。这个项目分配下来了之后,我也就开始由打杂换了一种方式去打杂.

       在做项目的过程中,任务的分配是非常明确的。什么时间干什么事情,每天的任务等等。加上模块的划分,各系统之间的耦合要低等原则。这就要求底层的东西要封装的特别好,重用性很高。

       因为之前一直都是在做题型和题库 这几个模块。相对于其他的模块来说,题型这里更加抽象。因为每个题型都有不同的特点。需要保存的方式也不同。至于题库,那更是得需要题型提供支持啦。

       总不能每个题型写一遍。那还不得累死。

       在做需求的时候,就已经知道,题型的这一部分是活的。这就需要一种新的方法——动态创建表。

     

    动态生成库,生成表。只知道用这些能解决以上的问题。

     

       在没有接触这些东西之前,画题型的原型……不会画。画题型的类图……把每个题型都画出来?累死不说,还不能扩展。

       这样做出来的系统,要想添加题型,改代码那是肯定的了。

     

       碰巧,前一阵子被组长调出去了,所要做的任务,也非常的适合。就是要把创建数据库的方法和创建数据库表的方法封装起来。

       这东西做完,对理解题型需求是非常有用的。

     

    任务很模糊,先做一个Demo,能实现就行。

    1、提供数据库名,然后去创建。

    2、指定数据库和数据表。当然还必须提供表字段和数据类型。去创建一张表。

     

     

    在研究了一番之后,也就先用拼接sql语句的方法来做吧。有其他方法的请指出。

     

    这些东西都被封装在底层了。所以动态创建库的方法 都需要用到SqlHelper。这里就不写了。如果需要的话,文章末尾有下载地址。

     

     #region 判断数据库是否存在
            /// <summary>
            /// 判断数据库是否存在
            /// </summary>
            /// <param name="db">数据库的名称</param>
            /// <param name="connKey">数据库的连接Key</param>
            /// <returns>true:表示数据库已经存在;false,表示数据库不存在</returns>
            public Boolean IsDBExist(string db,string connKey)
            {
                SQLHelper helper = SQLHelper.GetInstance();
    
                string connToMaster = ConfigurationManager.ConnectionStrings[connKey].ToString();
                string createDbStr = " select * from master.dbo.sysdatabases where name " + "= '" + db + "'";
    
                DataTable dt= helper.ExecuteQuery(createDbStr, CommandType.Text);
                if (dt.Rows.Count==0)
                {
                    return false;
                }
                else
                {
                    return true;
                }
            } 
            #endregion
    
            #region 判断数据库中,指定表是否存在
            /// <summary>
            /// 判断数据库表是否存在
            /// </summary>
            /// <param name="db">数据库</param>
            /// <param name="tb">数据表名</param>
            /// <param name="connKey">连接数据库的key</param>
            /// <returns>true:表示数据表已经存在;false,表示数据表不存在</returns>
            public Boolean IsTableExist(string db,string tb, string connKey)
            {
                SQLHelper helper = SQLHelper.GetInstance();
    
                string connToMaster = ConfigurationManager.ConnectionStrings[connKey].ToString();
                string createDbStr = "use " + db + " select 1 from  sysobjects where  id = object_id('" + tb + "') and type = 'U'";
    
                //在指定的数据库中  查找 该表是否存在
                DataTable dt = helper.ExecuteQuery(createDbStr, CommandType.Text);
                if (dt.Rows.Count == 0)
                {
                    return false;
                }
                else
                {
                    return true;
                }
    
            } 
            #endregion
    
            #region 创建数据库
            /// <summary>
            /// 创建数据库
            /// </summary>
            /// <param name="db">数据库名称</param>
            /// <param name="connKey">连接数据库的key</param>
            public void CreateDataBase(string db, string connKey)
            {
                SQLHelper helper = SQLHelper.GetInstance();
                //符号变量,判断数据库是否存在
                Boolean flag = IsDBExist(db, connKey);
    
                //如果数据库存在,则抛出
                if (flag == true)
                {
                    throw new Exception("数据库已经存在!");
                }
                else
                {
                    //数据库不存在,创建数据库
                    string connToMaster = ConfigurationManager.ConnectionStrings[connKey].ToString();
                    string createDbStr = "Create database " + db;
                    helper.ExecuteNonQuery(createDbStr, CommandType.Text);
                }
    
            } 
            #endregion
    
            #region 创建数据库表
            /// <summary>
            ///  在指定的数据库中,创建数据表
            /// </summary>
            /// <param name="db">指定的数据库</param>
            /// <param name="dt">要创建的数据表</param>
            /// <param name="dic">数据表中的字段及其数据类型</param>
            /// <param name="connKey">数据库的连接Key</param>
            public void CreateDataTable(string db, string dt, Dictionary<string, string> dic, string connKey)
            {
                SQLHelper helper = SQLHelper.GetInstance();
    
                string connToMaster = ConfigurationManager.ConnectionStrings[connKey].ToString();
    
                //判断数据库是否存在
                if (IsDBExist(db, connKey) == false)
                {
                    throw new Exception("数据库不存在!");
                }
    
                //如果数据库表存在,则抛出错误
                if (IsTableExist(db, dt, connKey) == true)
                {
                    throw new Exception("数据库表已经存在!");
                }
                else//数据表不存在,创建数据表
                {
                    //拼接字符串,(该串为创建内容)
                    string content = "serial int identity(1,1) primary key ";
                    //取出dic中的内容,进行拼接
                    List<string> test = new List<string>(dic.Keys);
                    for (int i = 0; i < dic.Count(); i++)
                    {
                        content = content + " , " + test[i] + " " + dic[test[i]];
                    }
    
                    //其后判断数据表是否存在,然后创建数据表
                    string createTableStr = "use " + db + " create table " + dt + " (" + content + ")";
    
                    helper.ExecuteNonQuery(createTableStr, CommandType.Text);
                }
            }
            #endregion


    以上就是与动态创建库,创建表相关的函数。

    下面这里是调用

    protected void Page_Load(object sender, EventArgs e)
            {
                if (!Page.IsPostBack)
                {
                    //创建一个名为testQuestion的库
                    CreateDataBase("questionType", "MSSql2012");
    
                    //用一个dictionary类型,来保存 数据库表的字段 和 数据类型
                    Dictionary<string, string> dic = new Dictionary<string, string>();
                    dic.Add("questionName", "varchar(20)");
                    dic.Add("content", "varchar(20)");
    
                    //在questionType库中创建一张名为xuanzeti的表
                    CreateDataTable("questionType", "xuanzeti", dic, "MSSql2012");
                }
            } 


    下面是执行前后的效果:

     

     

        用拼接Sql语句的方式封装非常容易理解。作为底层的东西,重用性是非常高的。所以这一块也就作为第一版了。

        如果有更好的方式,请联系我。

        Demo下载地址:http://download.csdn.net/detail/zc474235918/8207857

     

     

    展开全文
  • spring 动态创建bean

    千次阅读 2017-06-13 17:25:40
    spring 动态创建bean

    spring中可用java代码动态创建bean,具体应用场景:可以用于spring项目启动时加载数据源DataSource和jdbcTemplate:

    spring具体的创建的代码如下

    1、BeanUtil 的代码如下

    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import org.springframework.beans.factory.support.BeanDefinitionBuilder;
    import org.springframework.beans.factory.support.DefaultListableBeanFactory;
    import org.springframework.context.ApplicationContext;
    
    /**
     * 管理bean类
     */
    public class BeanUtil {
    
        // Spring Bean 工厂
        public static DefaultListableBeanFactory beanFactory;
        //注意在spring初始化刷新后要调用这个init方法来获得新的beanFactory对象
        public static void init(ApplicationContext applicationContext) {
            beanFactory = (DefaultListableBeanFactory) applicationContext.getAutowireCapableBeanFactory();
        }
        /**
         * 动态增加bean
         * 
         * @param className
         * @param beanKey
         * @param propertyMap
         * @param referenceMap
         * @return
         */
        public static boolean addBean(
                String className, String beanKey, Map<String, Object> propertyMap,
                Map<String, String> referenceMap, List<Object> propertyConstrList,
                List<String> referenceConstrList, String destroyMethod) {
            // 判断Spring容器中是否存在该Bean
            if (beanFactory.containsBeanDefinition(className)) {
                return true;
            }
    
            BeanDefinitionBuilder bdb = BeanDefinitionBuilder.rootBeanDefinition(className);
            bdb.getBeanDefinition().setAttribute("id", beanKey);
    
            // 设置bean参数属性
            if (propertyMap != null && !propertyMap.isEmpty()) {
                Iterator<String> propertyKeys = propertyMap.keySet().iterator();
                while (propertyKeys.hasNext()) {
                    String keyString = propertyKeys.next();
                    bdb.addPropertyValue(keyString, propertyMap.get(keyString));
                }
            }
    
            // 设置bean参数引用
            if (referenceMap != null && !referenceMap.isEmpty()) {
                Iterator<String> referenceKeys = referenceMap.keySet().iterator();
                while (referenceKeys.hasNext()) {
                    String keyString = referenceKeys.next();
                    bdb.addPropertyReference(keyString, referenceMap.get(keyString));
                }
            }
    
            // 设置bean构造参数属性
            if (propertyConstrList != null && !propertyConstrList.isEmpty()) {
                for (int i = 0; i < propertyConstrList.size(); i++) {
                    bdb.addConstructorArgValue(propertyConstrList.get(i));
                }
            }
    
            // 设置bean构造参数引用
            if (referenceConstrList != null && !referenceConstrList.isEmpty()) {
                for (int i = 0; i < referenceConstrList.size(); i++) {
                    bdb.addConstructorArgReference(referenceConstrList.get(i));
                }
            }
    
            if (destroyMethod != null && !destroyMethod.isEmpty()) {
                bdb.setDestroyMethodName(destroyMethod);
            }
    
            beanFactory.registerBeanDefinition(beanKey, bdb.getBeanDefinition());
    
            return true;
        }
    
        /**
         * 获取Bean
         * 
         * @param requiredType
         * @return
         */
        public static <T> T getBean(Class<T> requiredType) {
            return beanFactory.getBean(requiredType);
        }
    
        /**
         * 获取bean
         * @param beanName
         * @param requiredType
         * @return
         */
        public static <T> T getBean(String beanName,Class<T> requiredType) {
            return  beanFactory.getBean(beanName,requiredType);
        }
    
    }

    2、DataSourceUtil 类的代码如下

    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FilenameFilter;
    import java.io.InputStreamReader;
    import java.io.Reader;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Properties;
    import org.springframework.context.ApplicationContext;
    import org.springframework.jdbc.core.JdbcTemplate;
    
    import com.test.BaseConfigUtil;
    
    
    /**
     * 加载数据源类,将${catalina.home}/ybg/conf下面的所有数据源文件加入到bean工厂中
     */
    public class DataSourceUtil {
    
        /**
         * 初始化
         * 
         * @param applicationContext
         */
        public static void init(ApplicationContext applicationContext) {
    
                File dataDirectory = new File(System.getProperty("catalina.home") + File.separator + "test" + File.separator + "conf");
        // 数据源文件必定要是properties类型。 
        //过滤的文件名称以db开头,以properties结尾
            File[] dataFiles = dataDirectory.listFiles(new FilenameFilter() {
                @Override
                public boolean accept(File dir, String name) {
                    String fileName = name.toLowerCase();
    
                    if (fileName.endsWith(".properties")) {
                        if(fileName.startsWith("db")) {
                            return true;
                        }
                    }
    
                    return false;
                }
            });
        try (Reader reader = new InputStreamReader(new FileInputStream(dataFiles[i]), "UTF-8")) {
                    Properties properties = new Properties();
                    properties.load(reader);//读取数据库的.properties配置文件
    
                    if (!properties.isEmpty()) {
                        // 建立数据源的bean
                        Map<String, Object> propertyMap = new HashMap<String, Object>();
    
                        propertyMap.put("driverClassName",properties.getProperty("sqlDriver"));
                        propertyMap.put("url",properties.getProperty("sqlUrl"));
                        propertyMap.put("username",properties.getProperty("sqlUsername"));
                        propertyMap.put("password", properties.getProperty("sqlPassword"));
                        propertyMap.put("initialSize",properties.getProperty("sqlInitialSize"));
                        propertyMap.put("maxTotal",properties.getProperty("sqlMaxTotal"));
                        propertyMap.put("maxIdle",properties.getProperty("sqlMaxIdle"));
                        propertyMap.put("maxWaitMillis",properties.getProperty("sqlMaxWaitMillis"));
    
                        BeanUtil.addBean( "org.apache.commons.dbcp2.BasicDataSource", name + "_dataSource", propertyMap, null, null, null, "close");
    
                        // 建立jdbcTemplate的bean
                        List<String> referenceConstrList = new ArrayList<String>();
                        referenceConstrList.add(name + "_dataSource");
    
                        BeanUtil.addBean( "org.springframework.jdbc.core.JdbcTemplate", name + "_jdbcTemplate", null, null, null, referenceConstrList, null);
                        LogUtil.info("load datasource file {} success!", dataFiles[i].getAbsolutePath());
                    }
                } catch (Exception e) {
                    LogUtil.error("load datasource file {} fail!", dataFiles[i].getAbsolutePath());
                }
            }
    }
    
        /**
         * 获取数据源
    
         * @param datasourceFileName 数据源配置文件名
         * @return
         */
        public static JdbcTemplate getJdbcTemplate(String datasourceFileName) {
            String id = datasourceFileName + "_jdbcTemplate";
            return BeanUtil.getBean(id, JdbcTemplate.class);
        }
    }
    

    动态创建bean的代码位置如下图
    动态创建bean的示意图

    3、类比如下用xml加载dataSource和jdbcTemplate的方法

        <!-- 数据源配置 -->
        <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close">
            <property name="driverClassName" value="${sqlDriver}" />
            <property name="url"             value="${sqlUrl}" />
            <property name="username"        value="${sqlUsername}" />
            <property name="password"        value="${sqlPassword}" />
            <property name="initialSize"     value="${sqlInitialSize}"/>  
            <!-- 连接池启动时创建的连接数 -->
            <!-- 连接池最大连接数 -->
            <property name="maxIdle"         value="${sqlMaxIdle}"/>     
             <!-- 连接池最大空闲连接数。推荐与 maxTotal 的值一致。 -->
            <!-- 等待获取连接的时间.毫秒 -->
        </bean> 
        <!-- 配置Spring对数据库事务的支持   -->
        <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" c:dataSource-ref="dataSource"/>
        <!-- 开启注解事务的支持 -->
        <tx:annotation-driven transaction-manager="txManager"/>
    
        <!-- 配置Template -->
        <bean id="Template" class="org.springframework.jdbc.core.JdbcTemplate" c:dataSource-ref="dataSource"/>
    展开全文
  • MFC 动态创建按钮示例

    热门讨论 2012-08-26 19:21:27
    通常我们都是使用MFC的资源视图在对话框或FormView上通过拖拽的方式添加按钮,这里我们利用CButton对象来动态创建按钮,并对按钮添加单击消息响应。如果你有任何疑问,欢迎和我讨论。
  • 动态创建iframe页面内容

    千次阅读 2020-04-13 18:30:00
    <!DOCTYPE html> <... <head> ...动态创建iframe页面内容</title> <meta http-equiv="X-UA-Compatible" content="IE=edge"/> <meta http-equiv="content-type" co...

    版本一:通过文本域内容创建iframe页面

    <!DOCTYPE html>
    <html>
    <head>
        <title>创建iframe页面</title>
        <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    </head>
    <body>
    <textarea rows="10" cols="50" placeholder="请输入HTML内容"></textarea>
    <br>
    <button type="button">创建iframe页面</button>  
    <br><br><br>
    <script>
    	const textarea = document.querySelector('textarea');
    	const btn = document.querySelector('button');
    	let iframe, frameWin, frameDoc, frameBody;
    	btn.addEventListener('click', function(){
    		if (!iframe) {
    			iframe = document.createElement('iframe');
    			document.body.appendChild(iframe);
    			iframe.style.cssText = 'width: 400px; height: 200px;';
    			iframe.onload = function() {
    				frameWin = document.querySelector('iframe').contentWindow;
    				frameDoc = frameWin.document;
    				frameBody = frameDoc.body;
    				frameBody.innerHTML = textarea.value;
    			}
    		} else {
    			frameBody.innerHTML = textarea.value;
    		}
    	});
    </script>
    </body>
    </html>
    

    在这里插入图片描述

    版本二:创建iframe图表页面

    <!DOCTYPE html>
    <html>
    <head>
        <title>创建iframe页面</title>
        <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    </head>
    <body>
    <button type="button">创建iframe页面</button>  
    <br><br>
    <script src="https://cdn.bootcss.com/echarts/3.2.3/echarts.min.js"></script>
    <script>
    	const textarea = document.querySelector('textarea');
    	const btn = document.querySelector('button');
    	let iframe, frameWin, frameDoc, frameBody;
    	btn.addEventListener('click', function(){
    		if (!iframe) {
    			iframe = document.createElement('iframe');
    			iframe.style.cssText = 'width: 400px; height: 300px;';
    			iframe.onload = function() {
    				frameWin = document.querySelector('iframe').contentWindow;
    				frameDoc = frameWin.document;
    				frameBody = frameDoc.body;
    				let div = createDiv();
    				frameBody.appendChild(div);
    				createChart(div);
    			}
    			document.body.appendChild(iframe); //需要放在iframe的onload事件之后
    		} 
    	});
    	
    	// 创建div容器
    	function createDiv() {
    		let div = document.createElement('div');;
    		div = document.createElement('div');
    		div.style.cssText = 'width: 100%; height: 100%; background-color: gray';
    		return div;
    	}
    	
    	// 创建图表
    	function createChart(div) {
    	
    		const myChart = echarts.init(div);
    
    		// 指定图表的配置项和数据
    		const option = {
    			title: {
    			  text: '未来一周气温变化'         
    			},
    			tooltip: {},
    			legend: {},
    			toolbox: {},      
    			xAxis: [{         
    			  data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
    			}],
    			yAxis: { },
    			series: [{
    			  name: '最高气温',
    			  type: 'line',
    			  data: [11, 11, 15, 13, 12, 13, 10]          
    			},
    			{
    			  name: '最低气温',
    			  type: 'line',
    			  data: [1, -2, 2, 5, 3, 2, 0]        
    			}]
    		};
    
    		// 使用配置项和数据显示图表。
    		myChart.setOption(option);
    	}
    </script>
    

    在这里插入图片描述

    版本三:两种混在一起

    <!DOCTYPE html>
    <html>
    <head>
        <title>动态创建iframe页面内容</title>
        <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
        <meta http-equiv="content-type" content="text/html; charset=utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    </head>
    <body>
    <textarea rows="10" cols="50" placeholder="请输入HTML内容"></textarea>
    <br>
    <button id="createHTMLBtn" type="button">创建iframe文本域内容页面</button>  
    <br><br>
    <button id="createChartBtn" type="button">创建iframe图表页面</button>  
    <br><br><br>
    <script src="https://cdn.bootcss.com/echarts/3.2.3/echarts.min.js"></script>
    <script>
    	const textarea = document.querySelector('textarea');
    	const createHTMLBtn = document.querySelector('#createHTMLBtn');
    	const createChartBtn = document.querySelector('#createChartBtn');
    	
    	//点击按钮创建iframe标签
    	function createIframe(fn){
    		let iframe = document.querySelector('iframe');
    		
    		if (iframe) {
    			let frameWin = document.querySelector('iframe').contentWindow;
    			let frameDoc = frameWin.document;
    			let frameBody = frameDoc.body;
    			fn && fn(iframe,frameBody,frameDoc,frameWin);
    		} else {
    			iframe = document.createElement('iframe');	
    			iframe.style.cssText = 'width: 400px; height: 300px;';
    			iframe.onload = function() {
    				let frameWin = document.querySelector('iframe').contentWindow;
    				let frameDoc = frameWin.document;
    				let frameBody = frameDoc.body;
    				fn && fn(iframe,frameBody,frameDoc,frameWin);
    			}
    			document.body.appendChild(iframe);
    		} 
    	};
    	
    
    	
    	//点击按钮创建html内容
    	createHTMLBtn.addEventListener('click', function(){
    		
    		createIframe(function(iframe,frameBody){
    		debugger;
    			frameBody.innerHTML = textarea.value;
    		})
    	});
    	
    	//点击按钮创建图表内容
    	createChartBtn.addEventListener('click', function(){
    	
    		createIframe(function(iframe,frameBody){
    			createDiv(frameBody, function(div){
    				createChart(div);
    			});			
    		})				
    	});
    	
    	
    	// 创建div容器
    	function createDiv(frameBody, fn) {
    		let div = document.querySelector('div');
    		if (!div) {
    			div = document.createElement('div');
    			div.style.cssText = 'width: 100%; height: 100%; background-color: gray';
    			frameBody.innerHTML = '';
    			frameBody.appendChild(div);
    		}
    		fn && fn(div);
    	}
    	
    	// 创建图表
    	function createChart(div) {
    	
    		const myChart = echarts.init(div);
    
    		// 指定图表的配置项和数据
    		const option = {
    			title: {
    			  text: '未来一周气温变化'         
    			},
    			tooltip: {},
    			legend: {},
    			toolbox: {},      
    			xAxis: [{         
    			  data: ['周一', '周二', '周三', '周四', '周五', '周六', '周日']
    			}],
    			yAxis: { },
    			series: [{
    			  name: '最高气温',
    			  type: 'line',
    			  data: [11, 11, 15, 13, 12, 13, 10]          
    			},
    			{
    			  name: '最低气温',
    			  type: 'line',
    			  data: [1, -2, 2, 5, 3, 2, 0]        
    			}]
    		};
    
    		// 使用配置项和数据显示图表。
    		myChart.setOption(option);
    	}
    </script>
    </body>
    </html>
    

    在这里插入图片描述

    展开全文
  • 关于动态创建对话框的问题,网上也有不少相关的文章,但大多都是大同小异 主要的关键是: 请看下面的两种不同的动态创建对话框1. CDialog Dlg; Dlg.Create(IDD_DIALOG); Dig.ShowWindow(SW_SHOW);2. CDialog* ...
  • MySQL动态创建分区

    千次阅读 2015-07-02 17:28:19
    按日期分区的数据表我们希望每年、每个月甚至每天动态创建一个分区,这种情况就需要用事件和存储过程来实现动态添加分区,存储过程如下:
  • C++总结:动态创建对象

    千次阅读 2019-05-09 11:02:35
    动态创建对象 2019-5-9 动态创建对象 int * p = new int; //不设定初值;对于自定义对象,调用默认无参构造函数 int * p = new int(); //设定初值为0,对于自定义对象,调用含参构造函数 int * p = new int(2); ...
  • qml之动态创建销毁对象

    千次阅读 2017-04-05 11:48:14
    本例实现创建销毁的原理是通过调用creatObj()方法来创动态创建对象,通过destroy()的函数来销毁动态创建的组件,从而防止内存泄漏。
  • qml动态创建组件对象

    千次阅读 2018-03-06 15:56:53
    qml动态创建组件对象,使用分离js文件,动态销毁对象,属性别名等。 代码: main.cpp #include &lt;QGuiApplication&gt; #include &lt;QQuickView&gt; int main(int argc, char *argv[]) { ...
  • python动态创建

    千次阅读 2017-02-08 19:44:07
    python动态创建类 Dynamically create a type with Python
  • MFC动态创建线程

    千次阅读 2016-07-26 19:30:44
    这里需要一个知识点,就是多个线程可以共用一个线程函数,所以我们就不需要去烦恼怎么动态创建不同的线程函数。只需要考虑同一个线程函数什么时候该做哪一个线程的事就行。所以变化的就是穿进线程函数的参数了,然后...
  • MFC动态创建CEdit控件

    万次阅读 2017-12-11 18:10:04
    在项目开发时,可能遇到动态创建控件的情况。如根据当前用户的数量,动态创建控件显示用户信息等情况,需要动态常见静态文本框和编辑框等。 此时,利用控件类中Create()函数进行动态创建,默认是显示状态。如: ...
  • android 动态创建Fragment

    千次阅读 2014-11-03 11:58:09
    android 动态创建Fragment
  • js 动态创建和动态添加

    千次阅读 2018-08-29 16:44:33
    动态创建:根据服务器返回的数据来进行创建,本身不知道创建的数量 实例: 最终效果 : &amp;amp;lt;body id=&amp;quot;box&amp;quot;&amp;amp;gt; &amp;amp;lt;div&amp;amp;gt; &...
  • Typescript如何动态创建类?

    千次阅读 2020-01-08 13:47:31
    如何动态创建Typescript类?前言思路图代码User 如何动态的创建class (调用示例)ProxyClass 实现一个代理类(具体实现)Storage 实现不同的class存放(具体实现)注意 前言 想做一个工厂模式,之前写JAVA的时候...
  • C++ 动态创建对象

    千次阅读 2018-06-08 00:33:40
    转自...之类的语法,导致CreateShape 函数中需要不断地ifelse地去判断,如果有多个不同类对象需要创建,显然这是很费神的,下面通过宏定义注册的方法来实现动态创建对象。Shape.h:...
  • java 声明和动态创建数组

    万次阅读 2015-09-26 11:20:35
    昨天在写代码时候需要动态创建一组,竟然一时想不起来,该如何创建,查了一些资料,记录下来,提醒自己要注重基础。 int[] data = new int[3]; 这样就创建了初值为零的有3个元素的数组,这里的3也可以动态指定它的值...
  • golang 动态创建目录(文件夹)

    千次阅读 2019-11-19 11:08:39
    根据当前时间在固定目录下动态创建文件夹并修改文件夹的权限,如果文件夹已存在则不创建 具体代码如下: //basePath是固定目录路径 func CreateDateDir(basePath string) (dirPath, dataString string) { ...
  • 哪位些大神们在研究Activity的动态创建和动态注册?有没有方法?分享下经验呗。
  • C# 动态创建一个类

    千次阅读 2017-07-09 23:54:58
    C# 在运行时动态的创建类型是通过动态生成C#源代码,然后通过编译器编译成程序集的方式实现动态创建类型的。 主要功能代码如下: public static Assembly NewAssembly() {  //创建编译器实例。  ...
  • // 自动,动态创建 form表单 function getUrl(URL, PARAMS) { var temp = document.createElement(&quot;form&quot;); temp.action = URL; temp.method = &quot;post&quot;; temp.style....
  • Vue动态创建组件方法

    千次阅读 2018-10-29 16:47:00
    组件写好之后有的时候需要动态创建组件。例如: 编辑文章页面,正文是一个富文本编辑器,富文本编辑器是一个第三方的组件,点击添加章节的时候需要动态的创建一个富文本编辑器这个时候怎么处理呢。 富文本编辑器也...
  • excel动态创建控件

    千次阅读 2014-03-21 02:32:59
    分配上单击VBA函数到一个Excel的Userform中动态创建的按钮 Sign InTop AuthorsTerms of ServiceContact UsBlog  .htaccessAdmin  Home English Language Content 分配上单击VBA函数到一个Excel...
  • MFC 动态创建

    热门讨论 2013-11-28 19:34:19
    纯正的封装,算是彻底实现MFC程序的界面动态配置,是实现界面和功能的分离的基础
  • JS动态创建HTML标签

    千次阅读 2016-04-08 21:40:48
    JS动态创建HTML标签
  • 操作元素实例 -动态创建表格

    万次阅读 2020-09-24 20:00:56
    动态创建表格: 涉及知识: node.createElement()创建元素节点<p> 父节点.appendChild(child)添加节点<p> node.removeChild(child)删除元素字节<p> 对象的操作 <!DOCTYPE html> &...
  • 本示例实现利用 XML 布局文件动态创建CheckBox 可以在XML布局文件中先配置一个或若干CheckBox,然后以这些配置为模板来动态创建CheckBox对象

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,644,751
精华内容 657,900
关键字:

动态创建