插件化架构设计(3):前端可视化化平台插件架构-grafana实践
插件实践方案
其实插件你就把它当一个组件来用就好。用起来就是异步组件加载。
vue异步组件加载,看官方文档:https://cn.vuejs.org/v2/guide/components-dynamic-async.html
react异步组件加载,其实更好办:在Suspense里面 渲染异步组件或者 是 通过state 渲染出 加载的虚拟 组件
vue异步组件加载
<template>
<div class="wrapper">
<h3 style="text-align:left;">VueComponentMode</h3>
<button @click="show = false">销毁</button>
<button @click="switchComponent('component1')">组件1</button>
<button @click="switchComponent('component2')">组件2</button>
<div class="a">
<component :is="apps" v-if="show"></component>
</div>
</div>
</template>
<script>
import Vue from 'vue';
export default {
name: "VueComponent",
data() {
return {
show: false,
apps: 'ModelPage',
}
},
methods: {
/*
* 通过动态注册全局组件实现动态异步加载组件的功能
* */
switchComponent: function (component) {
Vue.component('ModelPage', () => import(`./${component}`)); //由于components改变后视图不会自动刷新, 需要手动刷新, 也可以使用this.$forceUpdate()
this.show = false;
let that = this;
window.setTimeout(function () {
that.show = true;
})
}
}
}
</script>
react粗暴版
import React, { Component } from "react";
export default function asyncComponent(importComponent) {
class AsyncComponent extends Component {
constructor(props) {
super(props);
this.state = {
component: null
};
}
componentDidMount() {
importComponent().then((mod) => {
this.setState({
// 同时兼容ES6和CommonJS的模块
component: mod.default ? mod.default : mod
});
});
}
render() {
const C = this.state.component;
return C ? <C {...this.props} /> : null;
}
}
return AsyncComponent;
}
react16.6 天赋就有懒加载
Vue TSX 异步加载插件
import SystemJS from 'systemjs/dist/system.js';
import { Component } from "vue-property-decorator";
import { Component as tsc } from "vue-tsx-support/lib/api";
interface Props {
}
interface Event {
}
@Component
export default class ChartWrapper extends tsc<Props, Event> {
tempCom = null
mounted(){
// import Comp from 'path/'
const Comp= SystemJS.import('path/')
this.$createElement(Comp, {
props: {
query: {
propsA: 'a',
},
onChange: (targets: any) => {},
},
})
}
render(){
return (<div>{this.tempCom}</div>)
}
}
组件/模块异步加载方案,请参看《前端模块化方案:前端模块化/插件化异步加载方案探索》
转载本站文章《插件化架构设计(3):前端可视化化平台插件架构-grafana实践》,
请注明出处:https://www.zhoulujun.cn/html/webfront/engineer/Architecture/8926.html
插件化架构设计(3):前端可视化化平台插件架构-grafana实践的更多相关文章
- 从服务端架构设计角度,深入理解大型APP架构升级
随着智能设备普及和移动互联网发展,移动端应用逐渐成为用户新入口,重要性越来越突出.但企业一般是先有PC端应用,再推APP,APP 1.0版的功能大多从现有PC应用平移过来,没有针对移动自身特点考虑AP ...
- MyBatis架构设计及源代码分析系列(一):MyBatis架构
如果不太熟悉MyBatis使用的请先参见MyBatis官方文档,这对理解其架构设计和源码分析有很大好处. 一.概述 MyBatis并不是一个完整的ORM框架,其官方首页是这么介绍自己 The MyBa ...
- 【架构设计】Android:配置式金字塔架构
最近做一个项目,在项目搭建之前,花了些许时间去思考一下如何搭建一个合适的架构.一开始的构思是希望能合理的把应用的各部分进行分离,使其像金字塔一样从上往下,下层为上层提供功能. 在平常项目中,总是有很多 ...
- 架构设计系列-前端模式的后端(BFF)翻译PhilCalçado
本文翻译自PhilCalçado的官网:https://philcalcado.com/2015/09/18/the_back_end_for_front_end_pattern_bff.html 对 ...
- GPS部标监控平台的架构设计(八)-基于WCF的平台数据通信设计
总体来讲,GPS部标平台的软件开发是一个对网络通信和应用程序之间通信的技术应用密集型的开发工作,也是有一定设计技术含量的工作. 1.设计通信接口 在设计的时候,根据职责划分,拆分成不同的应用子系统,对 ...
- 搭建rtmp直播流服务之3:java开发ffmpeg实现rtsp转rtmp并实现ffmpeg命令的接口化管理架构设计及代码实现
上一篇文章简单介绍了java如何调用ffmpeg的命令:http://blog.csdn.net/eguid_1/article/details/51777716 上上一篇介绍了nginx-rtmp服 ...
- 前端组件化-Web Components【转】
以下全部转自:http://www.cnblogs.com/pqjwyn/p/7401918.html 前端组件化的痛点在前端组件化横行的今天,确实极大的提升了开发效率.不过有一个问题不得不被重视,拟 ...
- C4 模型 - 可视化架构设计
前言 世界上最难的两件事是: 1. 把我的思想放进你的脑袋 2. 把你的钱放进我的口袋 第二点我们不探讨,因为这是众所周知的,不信?过来试试:) 对于第一点,对我们程序员来说,其实也是我个人一直强调的 ...
- GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台
在当前很多的GPS平台当中,有很多是基于asp.NET+siverlight开发的遗留项目,代码混乱而又难以维护,各种耦合和关联,要命的是界面也没见到比Javascript做的控件有多好看,随着需求的 ...
- Redis缓存项目应用架构设计二
一.概述 由于架构设计一里面如果多平台公用相同Key的缓存更改配置后需要多平台上传最新的缓存配置文件来更新,比较麻烦,更新了架构设计二实现了缓存配置的集中管理,不过这样有有了过于中心化的问题,后续在看 ...
随机推荐
- 【Qt6】列表模型——几个便捷的列表类型
前面一些文章,老周简单介绍了在Qt 中使用列表模型的方法.很明显,使用 Item Model 在许多时候还是挺麻烦的--要先建模型,再放数据,最后才构建视图.为了简化这些骚操作,Qt 提供了几个便捷类 ...
- k8s Rabbitmq安装部署
安装方式 kubectl apply -f rabbitmq.yaml -n yunda-dev-cache rabbitmq.yaml ##创建PV # 注意更换存储方式 --- apiVersio ...
- k8s zookeeper安装(集群版与非集群版)
集群版zookeeper安装 第一步:添加helm镜像源 helm repo add incubator http://storage.googleapis.com/kubernetes-charts ...
- mysql 索引图
- 夯实JAVA基本之一——泛型详解(2):高级进阶(转)
上一篇给大家初步讲解了泛型变量的各种应用环境,这篇将更深入的讲解一下有关类型绑定,通配符方面的知识. 一.类型绑定1.引入我们重新看上篇写的一个泛型:class Point<T> { pr ...
- Null return value from advice does not match primitive return type for
1.org.springframework.aop.AopInvocationException:Null return value from advice does not match primit ...
- 2023-11-11:用go语言,字符串哈希+二分的例题。 给定长为 n 的源串 s,以及长度为 m 的模式串 p, 要求查找源串中有多少子串与模式串匹配, s‘ 与 s 匹配,当且仅当 s‘ 与 s
2023-11-11:用go语言,字符串哈希+二分的例题. 给定长为 n 的源串 s,以及长度为 m 的模式串 p, 要求查找源串中有多少子串与模式串匹配, s' 与 s 匹配,当且仅当 s' 与 s ...
- 【Windows 开发环境配置】NVIDIA 篇
CUDA 从CUDA Toolkit Archive下载相应版本的离线安装包,这里以11.7为例. 打开安装包,在安装选项选择自定义模式,点击下一步. 在自定义安装选项中,仅选择CUDA组件(其中Ns ...
- Jenkins中HTML报告无法正常显示问题解决
自动化结果生成了HTML报告,但是在Jenkins中打开报告却显示空白,打开控制台,可以看到该报错 参考https://www.jenkins.io/doc/book/security/configu ...
- 用友NC产品接口开发,通过轻易云数据集成平台快速调用
通过用友NC产品的 UAP V63平台.插件相关处理.相关业务逻辑处理课程目标与要求课程内容课程目标与要求业务逻辑处理外部系统信息设置节点新建外部系统默认匹配规则:仅按对照表:外部系统数据与UAP.接 ...