{"id":9,"date":"2025-06-30T19:08:22","date_gmt":"2025-06-30T11:08:22","guid":{"rendered":"https:\/\/www.mxcst.com\/?p=9"},"modified":"2025-06-30T19:08:22","modified_gmt":"2025-06-30T11:08:22","slug":"angular%e5%9b%bd%e9%99%85%e5%8c%96%ef%bc%8c%e6%87%92%e5%8a%a0%e8%bd%bd%ef%bc%8c%e5%8a%a8%e6%80%81%e6%b7%bb%e5%8a%a0base","status":"publish","type":"post","link":"https:\/\/www.mxcst.com\/?p=9","title":{"rendered":"Angular\u56fd\u9645\u5316\uff0c\u61d2\u52a0\u8f7d\uff0c\u52a8\u6001\u6dfb\u52a0Base"},"content":{"rendered":"\n<p>Angular\u505a\u4e86\u56fd\u9645\u5316\u4e4b\u540e\u4f1a\u751f\u6210\u4e0d\u540c\u8bed\u8a00\u7684\u76ee\u5f55\uff0c\u52a0\u4e0a\u5728js\u6587\u4ef6\u662f\u4e0a\u4f20\u5230\u540e\u53f0\u9879\u76ee\u4e2d\uff0c\u901a\u8fc7\u57df\u540d\u52a0\u8f7djs\uff0cjs\u6587\u4ef6\u8def\u5f84\u6bd4\u8f83\u6df1\uff0c\u4f46js\u7684\u52a0\u8f7d\u662f\u9ed8\u8ba4\u4ece\u6839\u76ee\u5f55\u5f00\u59cb\u3002<\/p>\n\n\n\n<p>\u6240\u4ee5\u61d2\u52a0\u8f7d\u6a21\u5757\u7684\u65f6\u5019\u603b\u662f\u62a5404\u9519\u3002\u7ecf\u8fc7\u67e5\u9605\u8d44\u6599\u53d1\u73b0\u53ef\u4ee5\u5728\u6a21\u5757\u52a0\u8f7d\u524d\u52a8\u6001\u6dfb\u52a0\u4e00\u4e2a&lt;base&gt; tag\uff0c\u6a21\u5757\u52a0\u8f7d\u5b8c\u6210\u540e\u518d\u79fb\u9664\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import {ElementRef, Injectable, Renderer2, RendererFactory2} from '@angular\/core';\nimport {filter} from 'rxjs';\nimport {NavigationEnd, NavigationStart, Router} from '@angular\/router';\n\n@Injectable({\n  providedIn: 'root',\n})\nexport class AppInitializationService {\n  baseElement: HTMLBaseElement;\n  private targetSubstring = '\/scm\/smi\/dist'\n\n  private renderer: Renderer2;\n\n  constructor(private rendererFactory: RendererFactory2) {\n    this.renderer = this.rendererFactory.createRenderer(null, null);\n  }\n\n  setBaseUrl (router: Router, elm: ElementRef) {\n    router.events.pipe(filter(event => event instanceof NavigationStart || event instanceof NavigationEnd))\n      .subscribe(async (routerEvent: any) => {\n        if (await routerEvent instanceof NavigationStart) {\n        \n          \/\/ set base tag\n          this.targetSubstring =  elm.nativeElement.getAttribute('baseUrl');\n          this.setBaseHref(this.targetSubstring)\n        }\n        \/\/ remove &lt;base \/> after module loaded\n        if (await routerEvent instanceof NavigationEnd) {\n          this.removeBaseHref()\n        }\n      });\n  }\n\n  setBaseHref(newUrl: string): void {\n    const baseElement = this.renderer.createElement('base');\n    this.renderer.setAttribute(baseElement, 'href', newUrl);\n    const headElement = document.querySelector('head');\n    if (headElement) {\n      this.renderer.appendChild(headElement, baseElement);\n    }\n  }\n\n  removeBaseHref() {\n    const baseElements = document.querySelectorAll('base');\n    for (const baseElement of Array.from(baseElements)) {\n      if (baseElement.href.indexOf(this.targetSubstring) > 0) {\n        this.baseElement = baseElement\n      }\n    }\n    if (this.baseElement) {\n      this.baseElement.remove();\n    }\n  }\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Angular\u505a\u4e86\u56fd\u9645\u5316\u4e4b\u540e\u4f1a\u751f\u6210\u4e0d\u540c\u8bed\u8a00\u7684\u76ee\u5f55\uff0c\u52a0\u4e0a\u5728js\u6587\u4ef6\u662f\u4e0a\u4f20\u5230\u540e\u53f0\u9879\u76ee\u4e2d\uff0c\u901a\u8fc7\u57df\u540d\u52a0\u8f7djs\uff0cjs\u6587\u4ef6 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-9","post","type-post","status-publish","format-standard","hentry","category-4"],"_links":{"self":[{"href":"https:\/\/www.mxcst.com\/index.php?rest_route=\/wp\/v2\/posts\/9","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mxcst.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mxcst.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mxcst.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mxcst.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9"}],"version-history":[{"count":1,"href":"https:\/\/www.mxcst.com\/index.php?rest_route=\/wp\/v2\/posts\/9\/revisions"}],"predecessor-version":[{"id":10,"href":"https:\/\/www.mxcst.com\/index.php?rest_route=\/wp\/v2\/posts\/9\/revisions\/10"}],"wp:attachment":[{"href":"https:\/\/www.mxcst.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mxcst.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=9"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mxcst.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=9"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}