重新获得邮件后,对象的价值不会发生变化

时间:2018-02-09 19:18:36

标签: angular http-post subscription

这不是第一次发生。我通过http:

调用一个帖子resquest
this.http.post('url', this.simpleFilter)
  .map((response: Response) => response.json())
  .subscribe(data => {
    if (data.data) {
      this.simpleFilter = data.data;
      console.log(this.simpleFilter.type);
      console.log(this.simpleFilter);
      this.emissorFilter.next(this.simpleFilter);
    } else {
        swal(data.error, data.message, 'error');
    }

  },
  error => swal(data.error, data.message, 'error'));

我在console.log(this.simpleFilter.type)打印的类型是

  

1

但是当console.log(this.simpleFilter);打印对象的类型是

  

0

另一次发生

P.S。类型对象是枚举

为什么会这样?

2 个答案:

答案 0 :(得分:0)

如果您还发布了预期的输出并更详细地解释了所有内容,那么这会真正改善您的问题,但我很确定我明白您的问题是什么。

这是因为当您记录属性(数字或字符串)的属性时,您将获取当前存在的值并将其输出。打印对象时,您有一个显示在开发人员工具中的链接。因此,当数据更改时,控制台中对象的属性会更新。这导致了差异。您可以尝试将console.log语句包装在setTimeout中并延迟,以查看输出是否不同。

答案 1 :(得分:0)

要在订阅时正确设置我的对象,我必须将其包装在另一个对象中。 例如:

// in Service
let wrappedFilter = {
  type: this.simpleFilter.type,
  filter: this.simpleFilter
}
this.emissorWrappedFilter.next(wrappedFilter);

在订阅中,我重播了对象:

// in Component
this.service.emissorWrappedFilter.subscription ( wf => {
  this.simpleFilter = wf.filter;
  this.simpleFilter.type = wf.type;
  (...)
});

我不知道这是不是最好的方式,但它确实有效!