我将尝试添加一些与UUID相关的软件包,即https://www.npmjs.com/package/uuid-generator-ts和https://www.npmjs.com/package/@types/uuid。但是我遇到一个错误,如果我安装了这些软件包,请告诉我如何在角度6中生成UUID。
答案 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);
}
}