angular MicroApp微服务改造

简单记录下项目微服务改造

基于MicroApp

https://jd-opensource.github.io/micro-app/

https://juejin.cn/post/7134232108070862878

首先是为什么要改成微服务

随着业务多了,前端代码也越来越多,需要拆分下,避免多个后端微服务强依赖对应一个前端

写一个公共函数micro-app.service.ts,里面来写microApp一些变量方法

javascript 复制代码
import { Injectable } from '@angular/core';
import { Router } from '@angular/router';
import microApp from '@micro-zoe/micro-app';
@Injectable({
  providedIn: 'root',
})
export class MicroAppService {
  static microAppStart() {
    microApp.start({
     //
    });
  }

  subAppUrls = {
    url1: '/kang-url1',
    url2: '/kang-url2',
  };

  constructor(
    public router: Router,
  ) {}

  getSubAppUrl(name: string): string {
    const subAppUrl = this.subAppUrls[name];
    // 具体url逻辑
  }

  // 设置路由
  setBaseAppRouter() {
    microApp.router.setBaseAppRouter(this.router);
  }

 // 共享全局数据放这里
  setGlobalData() {
    microApp.setGlobalData({
      XXXInfoService: this.XXXInfoService,
    });
  }
}

在最外层的main.ts里面启动micro

javascript 复制代码
import { MicroAppService } from '@core/micro-app.service';

MicroAppService.microAppStart();

在最外层组件的app.component.ts里面注入micro

javascript 复制代码
import { MicroAppService } from '@core/micro-app.service';

 constructor(
    private microAppService: MicroAppService
  ) {
    this.microAppService.setBaseAppRouter();
    this.microAppService.setGlobalData();
  }

然后再写一个sub-app.component公共组件,用来加载子应用

javascript 复制代码
import { Component, CUSTOM_ELEMENTS_SCHEMA, HostListener, OnDestroy, OnInit } from '@angular/core';
import { ActivatedRoute, RouterOutlet } from '@angular/router';
import { unmountApp, getAllApps } from '@micro-zoe/micro-app';

@Component({
  template: `
    <micro-app
      [attr.name]="name"
      [attr.url]="url"
      [attr.baseroute]="baseRoute"
      (mounted)="onSubAppMounted()"
      (error)="onSubAppMounted()"
    ></micro-app>
    <router-outlet></router-outlet>
  `,
  schemas: [CUSTOM_ELEMENTS_SCHEMA],
  standalone: true,
  imports: [RouterOutlet],
})
export class SubAppComponent implements OnInit, OnDestroy {
	//具体方法不写了
}

最后就是其他组件的路由文件里面的修改了,component改成刚才的公共组件

javascript 复制代码
import { SubAppComponent } from '@layout/sub-app.component';
const routes: Routes = [
  {
    path: 'kang-url',
    component: SubAppComponent,
    data: {
      name: 'kang-url'
    },
  },
];

大致流程这样,具体细节太多了,不写了,就当是个思路参考下微服务的实现逻辑

相关推荐
JustHappy19 小时前
古法编程秘籍(七):互联网到底是什么?把两台电脑怎么说话搞懂就够了
前端·后端·网络协议
snow@li19 小时前
SEO-文章标题:写文章时候,分类+主标题+大纲+解释 作为标题 / 不点进去也知道全文覆盖什么 / 标题即架构
前端
kyriewen20 小时前
Git Commit 前自动修复代码风格?配置 Husky + lint-staged,从此 CR 只聊逻辑
前端·git·面试
小和尚同志20 小时前
AI 自动化测试探索(一):Playwright MCP
前端·人工智能·aigc
老马识途2.020 小时前
在AI的帮助下理解spring的启动过程
java·前端·spring
徐小夕21 小时前
Loop Engineering 深度解析与实战指南(全网最全)
前端·算法·github
运筹vivo@21 小时前
Python ContextVar 底层机制与内存模型拆解
前端·数据库·python
code bean21 小时前
【LangChain】检索器完全指南:从向量检索到生产级 RAG 架构
java·开发语言·微服务
#麻辣小龙虾#1 天前
基于vue3.0开发一款【固废与废气运维管理系统】(支持源码)
前端·vue.js·vue3
Cosolar1 天前
Docsify零构建文档站完全指南:从快速搭建到企业级部署
前端·开源·github