我有下面的课
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。它失去了其他道具。
如何解决这个问题?
答案 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);
}