Я знаю, что это может помочь некоторым пользователям.Это то, что я сделал в прошлом.Я создал Angular ID Service
, который отслеживает все идентификаторы, которые я генерировал на протяжении всего проекта.Каждый раз, когда генерируется идентификатор, он проверяется по всем остальным идентификаторам, чтобы убедиться, что он уникален.Существует одна публичная собственность и два публичных метода.
Помните
Необходимо создать новый идентификатор в методе ngOnInit
и удалить этот идентификатор в методе ngOnDestroy
.Если вам не удастся удалить идентификатор, когда компонент уничтожен, массив идентификаторов станет очень большим.
Код
ids: string[]
: это список всех уникальных идентификаторов, хранящихся вСервис для обеспечения уникальности.
generate(): string
: этот метод генерирует и возвращает уникальный идентификатор в виде строки;Вывод: например, bec331aa-1566-1f59-1bf1-0a709be9a710
remove(id: string): void
: этот метод удаляет указанный идентификатор из массива сохраненных идентификаторов.
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);
}
}