angular - Angular和localStorage如何获得一个唯一的密钥
问题描述
我有几个具有某些过滤器的可重用组件。我希望将这些过滤器保存到本地存储。然而,由于这些组件是可重复使用的,我需要为每个组件设置某种唯一的 id,否则每个组件的过滤器键都是相同的。
例如,我有具有 1:m 关系的组织和域(1 个组织,许多域)。然后我有一个域表组件,列出了几个域:(下面的所有示例都是摘录)
@Component({
selector: 'app-domain-table',
templateUrl: 'component.html',
styleUrls: ['component.scss']
})
export class DomainTableComponent implements OnInit {
// filter:
@Input()
organizationId: string;
}
然后我在 2 个页面上重新使用这个组件,域页面和组织页面:
<div class="head d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-2 pb-2 mb-3 border-bottom fix-width">
<div class="head-start">
<i class="fa fa-users"></i>
<h1 class="h2">Domains</h1>
</div>
</div>
<app-domain-table></app-domain-table>
<div class="head d-flex justify-content-between flex-wrap flex-md-nowrap align-items-center pt-2 pb-2 mb-3 border-bottom fix-width">
<div class="head-start">
<i class="fa fa-orgs"></i>
<h1 class="h2">Organizations</h1>
</div>
</div>
<app-organization-table></app-organization-table>
<app-domain-table></app-domain-table>
不,当我想为特定组织过滤域时,我只需设置它organizationId
,组件将处理其余部分。我已将其设置为在页面之间记住此值,如下所示:
private _organizationId: number = (+localStorage.getItem('DomainTableComponent._organizationId')) ?? 0;
public get organizationId(): number {
return this._organizationId;
}
public set organizationId(value: number) {
localStorage.setItem('DomainTableComponent._organizationId', value ? value.toString() : (0).toString());
this._organizationId = value;
}
但是,这会导致两个页面的过滤器DomainTableComponent
相同。这是因为它们使用相同的密钥:DomainTableComponent._organizationId
. 我需要以某种方式唯一地标识组件实例,所以我可以制作一个像这样的键:DomainTableComponent._organizationId.InstaceOnDomainPage
.
编辑:这个问题提出了一个很好的解决方案:How to access components unique encapsulation ID in Angular 9
解决方案
如果您使用封装模式(这是默认模式),您可以获得唯一的 id 角度添加到每个元素。让它在组件类中使用它:
this.constructor['ɵcmp'].id
推荐阅读
- android - 在 okhttp3 中超时服务缓存
- javascript - 尝试将更改作为一个整体保存为包含自定义对象的数组中的数组
- lua - zerobranestudio debug main.lua ok 但要求不能设置断点
- jenkins - 如果 SCM 轮询未检测到任何更改,如何退出 Jenkins 作业?
- oracle - 在 oracle DB 中创建用于查找和删除特定表的外键约束的过程
- picasso - 如何使用 picasso 库从 url 设置 drawableleft 图像?
- ios - Swift 类作为稍后实例化的参数
- css - 在移动设备上的容器中居中标题文本
- wordpress - 使用 PWA 在 Wordpress 标题中显示的 HTML 实体转义代码
- android - 如何为每个拉取请求托管一个 Android APK 文件,以便 QA 可以在合并之前对其进行测试?