最初,前端是没有架构的,因为功能简单的代码没有架构可言。通过操作DOM就能完成的工作,不需要复杂的设计模式和代码管理机制,也就不需要架构来支撑起应用。前端开发的发展历史分为以下几个阶段:
● 古典时期。由后端渲染出前端 HTML,用 Table 布局,用 CSS 进行简单的辅助。
● 动效时期。前端开始编写一些简单的 JavaScript 脚本来做动画效果,如轮播广告。
● Ajax 异步通信时期。2005年,Google 在诸多 Web 应用中使用了异步通信技术如 Google 地图,开启了 Web 前端的一个新时代。
一旦前端应用需要从后端获取数据,就意味着前端应用在运行时是动态地渲染内容的,这便是 Model(模型)UI 层解耦。jQuery 能够提供 DOM 操作方法和模板引擎等。这时的开发人员需要做下面两个事情:
● 动态生成 HTML。由后端返回前端所需要的 HTML,再动态替换页面的 DOM 元素。早期的典型架构如 jQuery Mobile,事先在前端写好模板与渲染逻辑,用户的行为触发后台并返回对应的数据,来渲染文件。
● 模板分离。由后端用 API 返回前端所需要的 JSON 数据,再由前端来计算生成这些 HTML。前端的模板不再使用 HTML,而是使用诸如 Mustache 这样的模板引擎来渲染 HTML。
由于 HTML 的动态生成、模板的独立与分离,前端应用开始变得复杂。后端的 MVC 架构进一步影响了前端开发,便诞生了一系列早期的 MVC 框架,如 Backbone,Knockout,等等。
一些非 webpack 构建的项目,例如 jQuery 项目、jsp 项目,都可以按照这个处理。
接入之前请确保你的项目里的图片、音视频等资源能正常加载,如果这些资源的地址都是完整路径(例如 https://qiankun.umijs.org/logo.png),则没问题。如果都是相对路径,需要先将这些资源上传到服务器,使用完整路径。
同时,你也需要开启相关资源的 CORS,具体请参照
目前没有很好的支持,具体可以参考这个官方仓库 。
社区还有一个封装好的 vite 插件 ,可以试试。
如果微应用不是直接跟路由关联的时候,你也可以选择手动加载微应用的方式:
多个应用的手动启动比较麻烦,这里我们可以通过 npm scripts
来快速启动多个应用。
npm scripts
启动脚本:
还支持并行运行多个任务。
需要注意如果脚本退出时返回空值,所有其它子进程都会被 SIGTERM 信号中断,可以用--continue-on-error
参数禁用行为。
更多使用方式参考 官方稳定。
registerMicroApps 方法的第二个参数可以配置加载子应用过程的生命周期钩子。
比如我们利用这些接口给子应用加入加载动画等功能。
layui上传附件控制上传附件大小 //执行上传请求后的回调。返回三个参数,分别为:res(服务端响应信息)、index(当前文件的索引)、upload(从新上传的方法,通常在文件上传失败后使用) //改变预览状态,将上传附件id存在 隐藏域中 * 第一个方法赋不了值,经过下面的赋值 //处理卡片页面列表展现问题 ,error: function(index, upload){ //执行上传请求出现异常的回调(通常为网络异常、URL 404等)。返回两个参数,分别为:index(当前文件的索引)、upload(从新上传的方法) //若是有附件,上传附件
//关闭卡片页面以前回调 //若是涉及到文件上传,关闭卡片页面将未上传的附件进行删除
10、layui点击列表行操做 //界面须要引用的插件 //TODO 父类仅仅绑定了工具条通用按钮事件, 若有其余事件请在这里定义
12、layui页面列表加载回调事件 //复选框事件选中之后回调 //TODO 父类仅仅绑定了工具条通用按钮事件, 若有其余事件请在这里定义
十3、layOption的列表加载动态指定查询条件 * 显示不一样设备列表 //界面须要引用的插件 //plugins 这个能够不传,可是请不要传空数组过来
//plugins 这个能够不传,可是请不要传空数组过来 //复选框事件选中之后回调 //界面绘制完成, 初始化界面事件
//initializing是为了解决咱们以前说的继承致使原型有多余参数的问题。当咱们直接将父类的实例赋值给子类原型时。是会调用一次父类的构造函数的。因此这边会把真正的构造流程放到init函数里面,经过initializing来表示当前是否是处于构造原型阶段,为true的话就不会调用init。 //fnTest用来匹配代码里面有没有使用super关键字。对于一些浏览器`function(){xyz;}`会生成个字符串,而且会把里面的代码弄出来,有的浏览器就不会。`/xyz/.test(function(){xyz;})`为true表明浏览器支持看到函数的内部代码,因此用`/\b_super\b/`来匹配。若是不行,就无论三七二十一。全部的函数都算有super关键字,因而就是个一定匹配的正则。 // 生成一个类,这个类会具备extend方法用于继续继承下去 //保留当前类,通常是父类的原型 //this指向父类。初次时指向Class超级父类 //开关 用来使原型赋值时不调用真正的构成流程 //这边其实就是很简单的将prop的属性混入到子类的原型上。若是是函数咱们就要作一些特殊处理 //经过闭包,返回一个新的操做函数.在外面包一层,这样咱们能够作些额外的处理 // 调用一个函数时,会给this注入一个_super方法用来调用父类的同名方法 //由于上面的赋值,是的这边的fn里面能够经过_super调用到父类同名方法 //离开时 保存现场环境,恢复值。 // 这边是返回的类,其实就是咱们返回的子类 // 赋值原型链,完成继承 //界面须要引用的插件 //TODO 父类仅仅绑定了工具条通用按钮事件, 若有其余事件请在这里定义
js模拟了java,闭包内部定义了一个'构造函数',经过实例化new this();来动态获取当前对象
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。