iT邦幫忙

2021 iThome 鐵人賽

DAY 21
1
Modern Web

Angular 常見問題大小事系列 第 21

如何在 Angular 取得當前頁面的絕對路徑

  • 分享至 

  • xImage
  •  

情境

當有一個連結需要另開新頁時,在 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


上一篇
Angular 淺拷貝之...日記文
下一篇
Angular ViewChild 與 ViewChildren 介紹
系列文
Angular 常見問題大小事31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言