Angular 如何为每个组件实例生成角度持久唯一标识符?

Angular 如何为每个组件实例生成角度持久唯一标识符?,angular,Angular,我需要生成一个id,以便在DB上保存过滤器组件应用的最后一个过滤器。问题是过滤器组件在我的应用程序的几个部分中都有实例,我需要一种方法为每个实例生成一个持久的id,以便保存到DB 我尝试使用nghost属性,但这一个在每个实例中都是相同的 private getId():任意{ const id=this.constructor['ɵcmp'].id; 返回id; } 我不能依赖随机生成,因为如果用户更改主机或浏览器,生成的id可能会更改。 有没有办法做到这一点 这是我现在的工作 在我的最后一

我需要生成一个id,以便在DB上保存过滤器组件应用的最后一个过滤器。问题是过滤器组件在我的应用程序的几个部分中都有实例,我需要一种方法为每个实例生成一个持久的id,以便保存到DB

我尝试使用nghost属性,但这一个在每个实例中都是相同的

private getId():任意{
const id=this.constructor['ɵcmp'].id;
返回id;
}
我不能依赖随机生成,因为如果用户更改主机或浏览器,生成的id可能会更改。 有没有办法做到这一点

这是我现在的工作

在我的最后一次尝试中,我添加了一个静态数字var,以便为组件获取一个计数器,然后将该内容添加到主机id中

导出类子组件{
静态指数=0;
unique=this.constructor['ɵcmp'].id+ChildComponent.index;
构造函数(){
ChildComponent.index++;
}
}
这个解决方案并没有提供我所需要的一切,因为根据不同过滤器的执行顺序,生成ID可能会有所不同,这可能会导致应用程序的两个不同路径中的两个过滤器获得相同的ID

为了防止这种情况,我添加了路由器服务以获取当前url:

构造函数(专用路由器:路由器){
ChildComponent.index++;
this.unique=btoa(this.constructor['ɵcmp'].id+ChildComponent.index+this.router.url);
}

现在我意识到,如果我们直接通过url导航,或者如果我们从主页导航,我们会为相同的组件实例获得不同的id。

如果您想为组件的每个实例创建一个标识符,您可以创建自己的
GUID
,并将其赋予变量
unique
。一个有效的例子:

export class ChildComponent implements OnInit{
  unique = '';

  ngOnInit() {
    this.unique = this.uuidv4()
  }

  uuidv4() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
      var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
      return v.toString(16);
    });
  }

}

可能是Symbol可以帮助您=返回Symbol(this.constructor['ɵcmp'].id);它生成了唯一的id,但是如果您想使用此id处理组件,您需要将它们存储在某个位置,可能在某些服务中。主要思想是使用此解决方案将组件实例的id和当前状态存储在db上。如果您重设页面,您将为同一实例生成相同的id?不,不会,如果您想对生成的GUID执行某些操作,您应该编写自己的逻辑,并可能将其保存在本地存储中以获得某种持久性,或者创建一个服务来处理GUID生成在我的情况下,我不需要它是持久的,只是唯一的。谢谢