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

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

相关推荐
用户059540174468 小时前
LLM对话记忆测试踩坑实录:手工回归30分钟,自动化后2分钟发现3个隐藏Bug
前端·css
Ashley的成长之路9 小时前
前端性能优化实战手册·第2篇:资源加载策略全解
前端·性能优化·资源加载·http/3·性能优化实战·资源加载优化
浅水壁虎9 小时前
vue基础(第二章 )
前端·javascript·vue.js
界面开发小八哥9 小时前
界面控件DevExtreme v26.1新版亮点——支持Angular 22
前端·javascript·angular.js·devexpress·ui开发·devextreme
Getflare9 小时前
前端 + UI 设计 + AI:这不是三个工种,是一个新三角能力模型(附自检清单)
前端·人工智能·ui
oil欧哟9 小时前
我做了一个 Vibe Coding 术语学习站:VibeHub
前端·ai·agent·独立开发·vibe coding
审小匠OpenCPAi10 小时前
银行流水核查怎么自动化?单边匹配、双向勾稽与图聚类异常检测的工程对比
java·前端·人工智能·python·审计
Revolution6110 小时前
一个公共表格组件,是怎么一步步失控的
前端·前端工程化
腻害兔11 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:CRM 客户关系模块深度解析——从线索到回款,一套完整的 B2B 销售闭环是怎么搭的?
java·前端·javascript·vue.js·产品经理·ai编程