Угловой 7 субъект поведения с объектом класса - PullRequest
0 голосов
/ 01 февраля 2019

У меня ниже класса

export class filter {
    public PageRecords: number;
    public SearchText: string;
    public SortColumn: string = null;
    public SortDirection: string = null;
    public StartingPos: number;
}

Ниже предмета поведения

filterParam = new BehaviorSubject(new filter);

Обновление предмета

this.filterParam.next(<filter>{StartingPos  : 1,PageRecords : 10 })

Когда я получаю значение предмета

this.filterParam.value

У него есть только два реквизита StartingPos и ​​PageRecords, которые я обновил.он потерял другие реквизиты.

Как решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Основываясь на значении имени параметров вашего класса, я думаю, что вы хотите один filter класс, и вы просто хотите уведомить других, когда этот фильтр будет изменен.

Я рекомендую этот код:

filter = new filter;
filterParam = new BehaviorSubject<filter>(this.filter);

// later change the filter like this
changeFilter() {
  this.filter.StartingPos = 1;
  this.filter.PageRecords = 10;
  this.filterParam.next(this.filter);
}
0 голосов
/ 01 февраля 2019

Это потому, что вы не передаете напрямую объект класса Filter.Вы применяете динамический JSON к объекту фильтра, но только с этими двумя свойствами.

Вы можете сделать что-то вроде этого:

const filterParam = new filter();
filterParam.StartingPos = 1;
filterParam.PageRecords = 10;

this.filterParam.next(filterParam);

РЕДАКТИРОВАТЬ: Я не сделалЗаметьте, что вы хотите просто обновить два значения из значения BehaviorSubject.Как @ritaj предложил в комментарии ниже этого aswer, вы можете сделать что-то вроде того, что он предложил:

this.filterParam.next(Object.assign(this.filterParam.value, {StartingPos: 1, PageRecords: 10 }

Object.assign () копирует значения (всех перечисляемых собственных свойств) из одного или нескольких источниковобъекты на целевой объект.Имеет подпись Object.assign (цель, ... источники).Целевой объект является первым параметром и также используется в качестве возвращаемого значения.Object.assign () полезен для объединения объектов или поверхностного их клонирования.

...