带有类对象的 Angular 7 行为主体

Md.*_*lam 5 observable rxjs behaviorsubject angular angular7

我有以下课程

export class filter {
    public PageRecords: number;
    public SearchText: string;
    public SortColumn: string = null;
    public SortDirection: string = null;
    public StartingPos: number;
}
Run Code Online (Sandbox Code Playgroud)

以下行为主题

filterParam = new BehaviorSubject(new filter);
Run Code Online (Sandbox Code Playgroud)

更新主题

this.filterParam.next(<filter>{StartingPos  : 1,PageRecords : 10 })
Run Code Online (Sandbox Code Playgroud)

当我得到主题的价值时

this.filterParam.value
Run Code Online (Sandbox Code Playgroud)

它只有我更新的两个道具开始位置和页面记录。它失去了其他道具。

如何解决这个问题?

Xar*_*ord 3

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

你可以这样做:

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

this.filterParam.next(filterParam);
Run Code Online (Sandbox Code Playgroud)

编辑: 我没有注意到您只想更新BehaviorSubject 值中的两个值。正如 @ritaj 在这个问题下面的评论中建议的那样,你可以做他建议的事情:

this.filterParam.next(Object.assign(this.filterParam.value, {StartingPos: 1, PageRecords: 10 }
Run Code Online (Sandbox Code Playgroud)

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