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'
    },
  },
];

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

相关推荐
前端之虎陈随易1 小时前
编程语言级别的Skill市场,AI Agent 的未来形态
前端·vue.js·人工智能·typescript·node.js
一路向北he1 小时前
字节钢铁军团--“提供情境,而非控制”
java·开发语言·前端
kyriewen1 小时前
豆包和千问同时关了智能体,我用它们搭的 3 个自动化全废了——迁移方案整理
前端·javascript·ai编程
前端一小卒2 小时前
我用 TypeScript 从零手写了一个 Claude Code,然后发现它的核心只有 30 行
前端·agent
大圣编程3 小时前
Python中continue语句的用法是什么?
开发语言·前端·python
yuhaiqiang3 小时前
随手 vibecoding 的浏览器插件已经 6000 多次下载,聊聊他的产品设计
前端·后端·面试
之歆4 小时前
Vue商品详情与放大镜组件
前端·javascript·vue.js
再吃一根胡萝卜5 小时前
如何把小米 MiMo 接入 CodeBuddy,打造私有 Agent
前端
负责的蛋挞6 小时前
异步HttpModule的实现方式
java·服务器·前端