【问题标题】:angular not showing created object until I refresh page在我刷新页面之前,角度不显示创建的对象
【发布时间】:2017-08-28 18:36:33
【问题描述】:

请帮忙,我有一个消息服务,它从数据库中获取我的消息并将它们显示在用户个人资料页面上。创建或删除消息时,只有刷新浏览器才能看到更改。

在我应用过滤器以按 Id 排序之前,页面会动态更新,为什么过滤器会取消绑定我的消息数组?

配置文件组件:

    export class ProfileComponent implements OnInit {

    user: User;
    userId: any;
    messages: any;  

    constructor(private authService: AuthService, private messageService: MessageService) {}

    ngOnInit() {
      this.authService.getUser().subscribe(
        (user: User) => {
        this.user = user;
        this.userId = user.userId;
        }
      );
       this.messageService.getMessages()
      .subscribe(
          (messages: Message[]) => {
            this.messages = messages.filter(x => x.userId == this.userId);
            //this.messages = messages; //this works perfect, but shows all users messages
          }
      );
    }
}

【问题讨论】:

  • 我真的希望有人能帮助我..我不知道为什么我的视图不会自行更新,因为它订阅了我正在添加和删除的相同消息

标签: node.js mongodb angular express mean-stack


【解决方案1】:

似乎您的第一个 API 调用(getUser 方法)需要更多时间,它在 getMessages 方法之后完成。 你应该以某种方式让他们依赖。您可以使用toPromise 方法将getUser Observable 转换为promise。

ngOnInit() {
  this.authService.getUser()
  .toPromise()
  .then(
     (user: User) => {
        this.user = user;
        this.userId = user.userId;
     }
  )
  .then(() => {
      this.messageService.getMessages()
      .subscribe(
         (messages: Message[]) => {
            this.messages = messages.filter(x => x.userId == this.userId);
         }
      );
  });
}

【讨论】:

  • 谢谢,但在刷新页面之前,我仍然看不到创建和删除的更改。在我将过滤器放在上面之前,我可以完美地使用消息数组..
【解决方案2】:

将您的代码更改为:

messages: Array<any> = [];  
this.authService.getUser().subscribe(
        (user: User) => {
        this.user = user;
        this.userId = user.userId;
        this.messageService.getMessages()
              .subscribe(
                  (messages: Message[]) => {
                    this.messages = messages.filter(x => x.userId === this.userId);
                    //this.messages = messages; //this works perfect, but shows all users messages
                  }
              );
        }
      );

你只需要嵌套其他 observables ,所以它会在第一次调用完成后被调用。

【讨论】:

  • 这并没有解决问题。我的服务正在返回要显示的消息数组,当我打开过滤器对消息进行排序时,它似乎弄乱了我在原始数组上工作的前端代码。我很迷茫,我唯一的解决方法是调用重新加载到browesr :(
  • 请您再用这段代码检查一下好吗?
  • 代码有效,但页面在我刷新之前不会显示结果。 Angular 2 中的编码错误是否强制刷新页面?
  • 不,编码还不错,等一段时间它会自动显示所有结果,就是这样。
  • 由于这些时间问题,页面显示信息是否很常见?有没有办法让我确保在代码执行之前从数据库中加载数据?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-15
  • 1970-01-01
  • 2015-10-31
  • 1970-01-01
  • 2012-07-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多