【问题标题】:Angular 7 behavior subject with class object带有类对象的Angular 7行为主题
【发布时间】:2019-06-25 19:06:00
【问题描述】:

我有以下课程

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。它失去了其他道具。

如何解决?

【问题讨论】:

    标签: angular rxjs observable angular7 behaviorsubject


    【解决方案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() 对于合并对象或浅层克隆它们很有用。

    【讨论】:

    • 如果我做 new filter() 那么如果我在其他一些函数上设置其他道具,那么它会丢失其他更新的值。否则我需要先取 this.filterParam.value,然后更新的值,虽然当我传递两个值时它应该只更新那些
    • 如果你这样做this.filterParam.next(&lt;filter&gt;{StartingPos : 1,PageRecords : 10 }),你无论如何都会失去它们
    • 您可以通过this.filterParam.next(Object.assign(this.filterParam.value, {StartingPos : 1,PageRecords : 10 } 保留旧值。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-03
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      相关资源
      最近更新 更多