Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular NGX选择性地序列化数组中的属性_Angular_Ngxs - Fatal编程技术网

Angular NGX选择性地序列化数组中的属性

Angular NGX选择性地序列化数组中的属性,angular,ngxs,Angular,Ngxs,我有一个AccountState,它存储帐户列表。AccountState必须序列化到本地存储,因此我使用 但是,我不想序列化帐户的每个属性。例如,我想序列化用户名而不是密码 现在我导入存储插件,如下所示: NgxsStoragePluginModule.forRoot({ key: [ 'account.accounts', 'account.accounts.username' // <-- not working as accounts is

我有一个AccountState,它存储帐户列表。AccountState必须序列化到本地存储,因此我使用

但是,我不想序列化帐户的每个属性。例如,我想序列化用户名而不是密码

现在我导入存储插件,如下所示:

NgxsStoragePluginModule.forRoot({
    key: [
        'account.accounts',
        'account.accounts.username' // <-- not working as accounts is an array not an object
    ]
})
NgxsStoragePluginModule.forRoot({
关键:[
“账户,账户”,

“account.accounts.username”//我认为单靠配置是无法做到这一点的。但是,您可以提供自己的
StorageEngine
并修改其中的数据

import { NgxsStoragePluginModule, StorageEngine, STORAGE_ENGINE } from '@ngxs/storage-plugin';

export class MyStorageEngine implements StorageEngine {
    get length(): number {
        // Your logic here
    }

    getItem(key: string): any {
        // Your logic here
    }

    setItem(key: string, val: any): void {
        // remove undesired values here
        let state = JSON.parse(val)
        state.accounts.accounts.forEach(acc => delete acc.password);
        localStorage.setItem(key, JSON.stringify(state));
    }

    removeItem(key: string): void {
        // Your logic here
    }

    clear(): void {
        // Your logic here
    }
}

@NgModule({
    imports: [
        NgxsModule.forRoot([]),
        NgxsStoragePluginModule.forRoot()
    ],
    providers: [
        {
        provide: STORAGE_ENGINE,
        useClass: MyStorageEngine
        }
    ]
})
export class MyModule {}
不过,我不会真正推荐这种方法,因为它会因为额外的(反)序列化而花费大量的开销


另一种方法是引入一个自行编写的插件,替换StoragePlugin,并在序列化之前删除不需要的值。

我担心情况就是这样。定制插件会很好。也许也可以使用支持此用例的PR扩展当前插件。谢谢您的时间!