插件实践方案

其实插件你就把它当一个组件来用就好。用起来就是异步组件加载。

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实践的更多相关文章

  1. 从服务端架构设计角度,深入理解大型APP架构升级

    随着智能设备普及和移动互联网发展,移动端应用逐渐成为用户新入口,重要性越来越突出.但企业一般是先有PC端应用,再推APP,APP 1.0版的功能大多从现有PC应用平移过来,没有针对移动自身特点考虑AP ...

  2. MyBatis架构设计及源代码分析系列(一):MyBatis架构

    如果不太熟悉MyBatis使用的请先参见MyBatis官方文档,这对理解其架构设计和源码分析有很大好处. 一.概述 MyBatis并不是一个完整的ORM框架,其官方首页是这么介绍自己 The MyBa ...

  3. 【架构设计】Android:配置式金字塔架构

    最近做一个项目,在项目搭建之前,花了些许时间去思考一下如何搭建一个合适的架构.一开始的构思是希望能合理的把应用的各部分进行分离,使其像金字塔一样从上往下,下层为上层提供功能. 在平常项目中,总是有很多 ...

  4. 架构设计系列-前端模式的后端(BFF)翻译PhilCalçado

    本文翻译自PhilCalçado的官网:https://philcalcado.com/2015/09/18/the_back_end_for_front_end_pattern_bff.html 对 ...

  5. GPS部标监控平台的架构设计(八)-基于WCF的平台数据通信设计

    总体来讲,GPS部标平台的软件开发是一个对网络通信和应用程序之间通信的技术应用密集型的开发工作,也是有一定设计技术含量的工作. 1.设计通信接口 在设计的时候,根据职责划分,拆分成不同的应用子系统,对 ...

  6. 搭建rtmp直播流服务之3:java开发ffmpeg实现rtsp转rtmp并实现ffmpeg命令的接口化管理架构设计及代码实现

    上一篇文章简单介绍了java如何调用ffmpeg的命令:http://blog.csdn.net/eguid_1/article/details/51777716 上上一篇介绍了nginx-rtmp服 ...

  7. 前端组件化-Web Components【转】

    以下全部转自:http://www.cnblogs.com/pqjwyn/p/7401918.html 前端组件化的痛点在前端组件化横行的今天,确实极大的提升了开发效率.不过有一个问题不得不被重视,拟 ...

  8. C4 模型 - 可视化架构设计

    前言 世界上最难的两件事是: 1. 把我的思想放进你的脑袋 2. 把你的钱放进我的口袋 第二点我们不探讨,因为这是众所周知的,不信?过来试试:) 对于第一点,对我们程序员来说,其实也是我个人一直强调的 ...

  9. GPS部标平台的架构设计(十)-基于Asp.NET MVC构建GPS部标平台

    在当前很多的GPS平台当中,有很多是基于asp.NET+siverlight开发的遗留项目,代码混乱而又难以维护,各种耦合和关联,要命的是界面也没见到比Javascript做的控件有多好看,随着需求的 ...

  10. Redis缓存项目应用架构设计二

    一.概述 由于架构设计一里面如果多平台公用相同Key的缓存更改配置后需要多平台上传最新的缓存配置文件来更新,比较麻烦,更新了架构设计二实现了缓存配置的集中管理,不过这样有有了过于中心化的问题,后续在看 ...

随机推荐

  1. python3使用pymsql操作mysql数据库

    操作系统 :Windows 10_x64 python版本 :3.9.2 pymysql版本: 1.0.2 MySQL版本: 5.7.38   之前写过一篇关于python操作mysql数据库的文章: ...

  2. 使用 sed 处理文本文件

    前言 sed 是一款 GNU 流编辑器,可以按照指定的规则去处理文本文件或流,其强大的功能使用户在命令中快捷地修改文本文件成为可能. 它不会修改文件,除非使用shell重定向来保存结果.默认情况下,所 ...

  3. .net 温故知新【13】:Asp.Net Core WebAPI 缓存

    一.缓存 缓存指在中间层中存储数据的行为,该行为可使后续数据检索更快. 从概念上讲,缓存是一种性能优化策略和设计考虑因素. 缓存可以显著提高应用性能,方法是提高不常更改(或检索成本高)的数据的就绪性. ...

  4. 🔥🔥Java开发者的Python快速进修指南:面向对象--高级篇

    首先,让我来介绍一下今天的主题.今天我们将讨论封装.反射以及单例模式.除此之外,我们不再深入其他内容.关于封装功能,Python与Java大致相同,但写法略有不同,因为Python没有修饰符.而对于反 ...

  5. Ubuntu下安装多个JDK,并设置其中一个为默认JDK

    由于使用需要,要在机器上同时安装OpenJDK 8和11,并将8设置为默认JDK 首先安装OpenJDK sudo apt-get install openjdk-8-jdk sudo apt-get ...

  6. 吉特日化MES & 再谈原料标签

    在前面之前提到的标签的选择和设计,原料标签可以做到如下几点:     1 原料标签是一物一码还是一码多物:在美妆类的原料建议原料标签采用一物一码,对于大液洗之类的产品原料如果能够做到一物一码最佳,但是 ...

  7. web概念概述

    JavaWeb:   *使用Java语言开发基于互联网的项目 软件架构   1.C/S:Client/Server 客户端/服务器端     *在用户本地有一个客户端程序,在远端有一个服务端程序    ...

  8. Hexo 主题开发之自定义模板

    关于 Hexo 如何开发主题包的教程在已经是大把的存在了,这里就不在赘述了.这边文章主要讲的是作为一个主题的开发者,如何让你的主题具有更好的扩展性,在用户自定义修改主题后,能够更加平易升级主题. 问题 ...

  9. 微服务项目-小Q视频网

    1.后台管理系统(更新中...) (1)讲师列表 (2)添加讲师 (3)导入课程分类 (4)课程分类列表 其他功能就不一一截图了,后台详细功能如下 2.前台会员系统(更新中...) (1)前台的技术栈 ...

  10. 【Python】【OpenCV】【NumPy】图像数据的访问

    接上一随笔,这次学习针对图像数据的访问(Numpy.array) 在OpenCV中,使用 imread() 方法可以访问图像,其返回值是一个数组,而根据传入的不同图像,将会返回不同维度的数组. 针对返 ...