首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角度订阅更改不会触发视图更新

角度订阅更改不会触发视图更新
EN

Stack Overflow用户
提问于 2017-10-30 20:07:51
回答 2查看 752关注 0票数 0

我有问题的变化检测,我无法找出哪里出了问题,或如果我只是不理解角度正确。对于类似的问题,我查看了堆栈溢出的答案,但是这些方法并没有解决我的问题。

我有一个服务,是存储的情感选择,我有2个模态组件订阅。我有一个模式,用户选择情绪,然后使用服务更新选定的情绪。第二个模式还订阅选定的情绪,并在收到更新时更新其类上的情绪列表。我尝试过几种方法,如detectChanges()和tick(),但都没有效果。我知道订阅是有效的,模式正在接收更新的情绪列表,但不知何故,更改检测根本不起作用,视图更新也没有被触发。我不明白为什么手动触发更改检测不起作用,这让我怀疑我的理解。我想如果我更新了类中的this.emotions (视图所依赖的),就会触发更新.

服务:

代码语言:javascript
复制
@Injectable()
export class BeforeFormProvider {
  selectedEmotions = new BehaviorSubject({});
  selectedDistractions = new BehaviorSubject({});

  constructor(private databaseProvider: DatabaseProvider) {
  }

  updateEmotions(emotions) {
    this.selectedEmotions.next(emotions);
  }

  updateDistractions(distractions) {
    this.selectedDistractions.next(distractions);
  }

}

变更检测不起作用的模式,:我将只包含类中具有更新逻辑的部分。我在课堂上有感情。

代码语言:javascript
复制
ngOnInit() {
    //automatically generate date/time to current for form
    this.date = this.datePipe.transform(new Date(), 'mediumDate');
    this.time = this.datePipe.transform(new Date(), 'shortTime');

    this.emotionsSubscription = this.bfProvider.selectedEmotions.subscribe(emotions => {
      this.emotions = emotions;
      this.ref.tick();
    });
    this.distractionsSubscription = this.bfProvider.selectedDistractions.subscribe(distractions => this.distractions = distractions);
  }

模式HTML: p标记没有更新,它从不识别任何更改!我不知道我做错了什么。

代码语言:javascript
复制
<ion-item detail-push (click)="openEmotionsList()">
   <h2>Emotions</h2>
   <p>{{emotions | getValues}}</p>
</ion-item>
EN

回答 2

Stack Overflow用户

发布于 2017-10-31 13:19:34

我想出来了。在通过服务中的.next()发送之前,我需要做一个新的列表副本。我保存了一个对对象的引用,该引用是在Modals中通过订阅返回的,然后将同一个对象的一个变异版本发送回服务中的每一个更新,因此它不会触发视图更新。

代码语言:javascript
复制
updateEmotions(emotions) {
  this.selectedEmotions.next({...emotions});
}
票数 0
EN

Stack Overflow用户

发布于 2018-03-05 22:28:42

与其制作副本,不如看看您的getValues管道,确保它不是设置为纯的:

代码语言:javascript
复制
@Pipe({
  name: 'getValues',
  pure: false
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47023379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档