如何在角度6中生成UUID

时间:2018-10-16 13:11:27

标签: typescript uuid

我将尝试添加一些与UUID相关的软件包,即https://www.npmjs.com/package/uuid-generator-tshttps://www.npmjs.com/package/@types/uuid。但是我遇到一个错误,如果我安装了这些软件包,请告诉我如何在角度6中生成UUID。

3 个答案:

答案 0 :(得分:7)

与Angular本身无关,您可以从流行的npm软件包之一获得uuid,例如:

https://www.npmjs.com/package/uuid

代码如下:

import * as uuid from 'uuid';

const myId = uuid.v4();

答案 1 :(得分:3)

以@MrGrigri为例:如果您不想比较随机数并将其保留在数组中,则可以执行以下操作,并且不需要完整的npm程序包,并且可以控制多少组4个你想要的

/**
 * generate groups of 4 random characters
 * @example getUniqueId(1) : 607f
 * @example getUniqueId(2) : 95ca-361a-f8a1-1e73
 */
export function getUniqueId(parts: number): string {
  const stringArr = [];
  for(let i = 0; i< parts; i++){
    // tslint:disable-next-line:no-bitwise
    const S4 = (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
    stringArr.push(S4);
  }
  return stringArr.join('-');
}

答案 2 :(得分:1)

我知道这可能会帮助一些用户。这是我过去所做的。我创建了一个Angular ID Service,用于跟踪我在整个项目中生成的所有ID。每次生成ID时,都会对照所有其他ID对其进行检查,以确保其唯一性。有一个公共财产和两个公共方法。

记住

您必须在ngOnInit方法中生成新的ID,并在ngOnDestroy方法中删除该ID。如果您在销毁组件时未能删除ID,则ID数组将变得非常大。

代码

ids: string[]: 这是服务中存储的所有唯一ID的列表,以确保唯一性。

generate(): string: 该方法将生成并返回一个唯一的ID作为字符串。 输出:例如bec331aa-1566-1f59-1bf1-0a709be9a710

remove(id: string): void: 此方法将从存储的id的数组中删除给定的id。

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root',
})
export class IdService {
  public ids: string[] = [];

  constructor() {}

  public generate(): string {
    let isUnique = false;
    let tempId = '';

    while (!isUnique) {
      tempId = this.generator();
      if (!this.idExists(tempId)) {
        isUnique = true;
        this.ids.push(tempId);
      }
    }

    return tempId;
  }

  public remove(id: string): void {
    const index = this.ids.indexOf(id);
    this.ids.splice(index, 1);
  }

  private generator(): string {
    const isString = `${this.S4()}${this.S4()}-${this.S4()}-${this.S4()}-${this.S4()}-${this.S4()}${this.S4()}${this.S4()}`;

    return isString;
  }

  private idExists(id: string): boolean {
    return this.ids.includes(id);
  }

  private S4(): string {
    return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
  }
}