Удаление нулевого или неопределенного значения из угловой наблюдаемой

#angular #rxjs #observable

Вопрос:

Я использую угловое управление состоянием BehaviourSubject , но при перемещении данных для хранения добавляется undefined значение в конец объекта (создается другое undefined значение). может ли кто — нибудь предложить способ удаления?

 {todos:[{"accountNo":"91957869","vpainfo":[{"vpa":"saasasa@fff"}]},undefined]}
 

Ниже приведены примеры фрагментов,

Поведенческий магазин.ts

 import {Observable, BehaviorSubject} from 'rxjs';

export class Store<T> {
    state$: Observable<T>;
    private _state$: BehaviorSubject<T>;

    protected constructor (initialState: T) {
        this._state$ = new BehaviorSubject(initialState);
        this.state$ = this._state$.asObservable();
    }

    get state (): T {
        return this._state$.getValue();
    }

    setState (nextState: T): void {
        this._state$.next(nextState);
    }
}
 

Состояние поведения.ts

 export interface User {
    accountNo?: string;
    vpainfo: VPAinfo[]
  }
  export interface VPAinfo {
    vpa?: string;
  }
  export class BehaviourState {
    todos: User[]
  }
 

Приводитель поведения.ts

 import { Injectable } from '@angular/core';
import { Store } from './behaviourStore';
import { BehaviourState } from './behaviourState';
import * as fromActions from '../actions/users.actions';

@Injectable()
export class BehaviourReducer extends Store<BehaviourState> {
    constructor() {
        super(new BehaviourState());
    }
    callReducer(action: any) {
        switch (action.type) {
            case fromActions.ADD_TODO:
                this.setState({ ...this.state, todos: [action.payload.todo, ...this.state.todos] });
                break;
        }
    }
}
 

И, наконец, добавление данных следующим образом,

 const resultobj = {"accountNo":"91957869","vpainfo":[{"vpa":"saasasa@fff"]};
const action = { type: fromActions.ADD_TODO, payload: { todo: resultobj}};
this.behaviourReducer.callReducer(action);
 

Ответ №1:

Поскольку вы не определили какое-либо значение по умолчанию для задач. Это показывает неопределенность.

Попробуй это:

 export class BehaviourState {
    todos: User[] = [];
 }
 

Ответ №2:

Это происходит потому , что начальное значение todos is undefined , поэтому вам нужно либо присвоить ему начальное значение в BehaviourState классе, например:

 export class BehaviourState {
  todos: User[] = [];
}
 

Или путем обработки нулевого/неопределенного значения в пределах reducer , подобных следующему:

 this.setState({ ...this.state, todos: [action.payload.todo, (...this.state.todos || [])] });