Angular 7行为主题与类对象

时间:2019-02-01 08:23:12

标签: angular rxjs observable angular7 behaviorsubject

我有下面的课

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 :(得分:1)

这是因为您没有直接传递Filter对象类。您正在将一些动态json转换为过滤器对象,但仅具有这两个属性。

您可以执行以下操作:

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

this.filterParam.next(filterParam);

编辑: 我没有注意到您只想从BehaviorSubject值更新两个值。正如@ritaj在此问题下方的评论中建议的那样,您可以执行类似他建议的操作:

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

Object.assign()将(所有可枚举的所有属性的)值从一个或多个源对象复制到目标对象。它具有Object.assign(target,... sources)的签名。目标对象是第一个参数,也用作返回值。 Object.assign()对于合并对象或浅浅克隆它们很有用。

答案 1 :(得分:0)

根据类参数名称的含义,我认为您需要一个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);
}