После изменения store adapter.updateone старые данные появляются в mat-table - PullRequest
0 голосов
/ 17 июня 2020

У меня следующий @Effect ():

    updateRole$ = this.actions$
        .pipe(
            ofType<RoleUpdated>(RoleActionTypes.RoleUpdated),
            mergeMap(( { payload } ) => {
                this.store.dispatch(this.showActionLoadingDistpatcher);
                return this.auth.updateRole(payload.role);
            }),
            map(() => {
                return this.hideActionLoadingDistpatcher;
            }),
        );

Это мой код действия в role.action.ts:

    readonly type = RoleActionTypes.RoleUpdated;
    constructor(public payload: {
        partialrole: Update<Role>,
        role: Role
    }) { }
}

Эти два связанных случая относятся к моей роли. reducer.ts:

case RoleActionTypes.RoleUpdated: return adapter.updateOne(action.payload.partialrole, state);
case RoleActionTypes.RolesPageLoaded: return adapter.addMany(action.payload.roles, {
            ...initialRolesState,
            listLoading: false,
            queryRowsCount: action.payload.totalCount,
            queryResult: action.payload.roles,
            lastQuery: action.payload.page,
            showInitWaitingMessage: false
        });

Это код файла role.selector.ts:

export const selectQueryResult = createSelector(
    selectRolesState,
    rolesState => {
        const items: Role[] = [];
        each(rolesState.entities, element => {
            items.push(element);
        });
        const httpExtension = new HttpExtenstionsModel();
        const result: Role[] = httpExtension.sortArray(items, rolesState.lastQuery.sortField, rolesState.lastQuery.sortOrder);

        return new QueryResultsModel(result, rolesState.queryRowsCount, '');
    }
);

Это функция обновления в role-edit.dialog.component.ts

updateRole(_role: Role) {
        this.loadingAfterSubmit = true;
        this.viewLoading = true;
        /* Server loading imitation. Remove this on real code */
        const updateRole: Update<Role> = {
            id: this.role.id,
            changes: _role
          };
        this.store.dispatch(new RoleUpdated({
            partialrole: updateRole,
            role: _role
        }));

            this.viewLoading = false;
            this.dialogRef.close({
                _role,
                isEdit: true
            });

    }

Проблема в том, что когда я редактирую конкретную запись из mat-table и пытаюсь обновить роль запись, она обновляет мои изменения в таблице после сохранения изменяется, но когда он извлекает записи через api из серверной части, эти записи также обновляются, но , к сожалению, через некоторое время таблица загружает старые данные .

У меня отлажено и выясняется, что после изменений обновленные записи, поступающие через api (обновлены в базе данных). Но я думаю, что есть проблема с кешем или что-то еще, что я не могу понять. Я пробовал много изменений, но, кажется, бесполезно обсуждать, и этот код кажется правильным. Пожалуйста, помогите мне решить эту проблему. Не знаю, как избежать кеширования данных в angular. Я новичок и учусь angular. Спасибо

...