如何在 Angular 取得当前页面的绝对路径

情境

当有一个连结需要另开新页时,在 develop 或 production 需要对应到正确的路径
Angular 提供了这个方式 https://angular.tw/api/common/Location#prepareexternalurl


实作一个外埠连结 url 的 pipe

所以我就做了以下的 pipe,在有需要的时後,直接帮我转换

建立一个 pipe 名为 externalUrl

ng g p externalUrl

pipe.ts

import { Pipe, PipeTransform } from "@angular/core";
import { Location } from "@angular/common";
import { HttpParams } from "@angular/common/http";

@Pipe({
  name: "externalUrl",
})
export class ExternalUrlPipe implements PipeTransform {
  constructor(private location: Location) {}

  transform(url: string, ...queryParams: Object[]): unknown {
    const setQueryParams = queryParams.length
      ? `?${String(this.getQueryParams(queryParams?.[0]))}`
      : "";
    return this.location.prepareExternalUrl(url) + setQueryParams;
  }

  getQueryParams(source: any): HttpParams {
    let target: HttpParams = new HttpParams();
    Object.keys(source).forEach((key: string) => {
      const value: string | number | boolean | Date = source[key];
      if (typeof value !== "undefined" && value !== null) {
        target = target.append(key, value.toString());
      }
    });
    return target;
  }
}

使用 pipe

在 template 里

<a [href]="'../ithome/externalUrl' | externalUrl: {name: external}">外部网址</a>

实际网址 => http://外部网址//ithome/externalUrl?name=external


用在 ts 里,首先要先把 pipe 注入

providers: [ExternalUrlPipe],

.ts

this.externalUrlPipe.transform("../ithome/externalUrl", { name: "external" });

参考资料:
为自订资料转换建立管道
https://angular.tw/api/common/Location#prepareexternalurl


<<:  Day 20 - Self-defined Data types(in C) 自订资料型态

>>:  Day-21 队列(Queue)与循环对列(Circular Queue)

[重构倒数第10天] - 行动装置上面的 Touch 跟 Click

前言 该系列是为了让看过Vue官方文件或学过Vue但是却不知道怎麽下手去重构现在有的网站而去规画的系...

闭路电视的种类

随着科技的进步,闭路电视的种类亦有很多。 而且安装闭路电视越来越普遍。 因应供应及需求定律,市场上出...

15.unity变数传递(下)场景间数据传递

上一篇提到改变其他脚本的全域变数 这一篇针对场景间保留数据的方法作探讨。 在unity换场景(sce...

Day_01 Openwrt intro

你曾经被有家里的网路设备介面与功能雷到吗?你讨厌路由器原生不亲民的页面吗?你想要更多功能可是预算却有...

Day 23 - [Android APP] 01-架构介绍-MVVM

第 23 天,这几天库存真的用完了,所以文章都是最新鲜,当天写的喔!! 剩下 7 天,一起加油吧! ...