离子推送通知打开页面但页面导航混乱

ionic push notification opens page but in page navigation is messed up

朋友们:

我有一个离子应用程序,它有一个页面,用户可以在其中 post 对故事发表评论。如果用户 post 发表了新评论,该评论将显示在页面中。使用带有 *ngFor.

的“let comment of postComments”片段从 REST API 获取评论
<ion-content *ngIf="!searchUser" #myContent padding [scrollEvents]="true">
  <ion-refresher slot="fixed" (ionRefresh)="reloadPage($event)">
    <ion-refresher-content pullingIcon="arrow-dropdown" refreshingSpinner="circles" refreshingText="Refreshing..." >
    </ion-refresher-content>
  </ion-refresher>
  
  <div class="post-content">
    <ion-item lines="none" no-padding>
      <ion-avatar slot="start">
        <img [src]=" (profileUrl == null) ? 'assets/img/emptyperson.jpg' : profileUrl">       
      </ion-avatar>

      <p class="user-post-text">
        <strong>{{
          username
        }}</strong><span>
          {{ description }}
        </span>
      </p>
    </ion-item>

    <div class="border"></div>

    <ion-item-sliding class="comments-container" *ngFor="let comment of postComments; let i = index; let c = count;" [id]="'slidingItem' + i">
      <ion-item  no-padding lines="none">
        <ion-avatar slot="start">
          <img [src]=" (comment.profileUrl == null) ? 'assets/img/emptyperson.jpg' : comment.profileUrl">       
        </ion-avatar>
        <p>
          <strong>{{
            comment.username
          }}</strong>
          {{ comment.comment }}
        </p>
        <ion-button
          slot="end"
          fill="clear"
          (click)="likeButton(comment.id, comment.currentUserLike)"
          [disabled]="disableLikeButton"
        >
          <ion-icon
            *ngIf="!comment.currentUserLike"
            slot="icon-only"
            name="heart-outline"
            color="black"
          ></ion-icon>

          <ion-icon
            *ngIf="comment.currentUserLike"
            slot="icon-only"
            name="heart"
            color="danger"
          ></ion-icon>
        </ion-button>
        <br/>
      </ion-item>
      <ion-item-options *ngIf="isPostMine && (comment.userId != userdetails.id)">
        <ion-item-option color="danger" >
          <button color="danger" [disabled]="disableDeleteButton" (click)="removeComment(comment.id,i)"><ion-icon class="inside-icon" name="trash"></ion-icon></button>
        </ion-item-option>
        <ion-item-option color="primary" >
          <button color="primary" (click)="reportOffensive(comment.id,i)"><ion-icon class="inside-icon" name="remove-circle"></ion-icon> </button>
        </ion-item-option>
      </ion-item-options>
      <ion-item-options *ngIf="isPostMine && (comment.userId == userdetails.id)">
        <ion-item-option color="danger" >
          <button color="danger" [disabled]="disableDeleteButton" (click)="removeComment(comment.id,i)"><ion-icon class="inside-icon" name="trash"></ion-icon></button>
        </ion-item-option>
        </ion-item-options>
      <ion-item-options *ngIf="!isPostMine && (comment.userId != userdetails.id)">
        <ion-item-option color="primary" >
          <button color="primary" (click)="reportOffensive(comment.id,i)"><ion-icon class="inside-icon" name="remove-circle"></ion-icon> </button>
        </ion-item-option>
        </ion-item-options>
      <ion-item-options *ngIf="!isPostMine && (comment.userId == userdetails.id)">
        <ion-item-option color="danger" >
          <button color="danger" [disabled]="disableDeleteButton" (click)="removeComment(comment.id,i)"><ion-icon class="inside-icon" name="trash"></ion-icon></button>
        </ion-item-option>
      </ion-item-options>
      <p class="all-comments">
        <span class="grey-text">  {{ comment.createdAt | timeAgo }}</span>
        <span *ngIf="comment.numLikes > 0" class="grey-text tab" (click)="userList(comment.id,'CommentLikes')">{{comment.numLikes}} likes</span>
      </p>

        
      </ion-item-sliding>
  </div>
</ion-content>

<ion-footer>
  <ion-item lines="none">
    <ion-avatar slot="start">
      <img src="{{ userProfileUrl }}" />
    </ion-avatar>

    <ion-textarea autocapitalize="sentences" maxLength="255" type="text"
      [(ngModel)]="commentContent" (ionChange)="getUsers($event)"
      rows="1"
      placeholder="Add a comment"
    ></ion-textarea>

    <ion-icon class="blueicon" slot="end" name="send" (click)="addComment()"></ion-icon>

  </ion-item>
</ion-footer>

在我的打字稿中,我有一个函数 addComment() 可以刷新 postComments 的值,以便页面自动重新加载。

addComment() {


    if (this.commentContent.trim()) {
      this.showLoader("Posting Comment ...");
      this.userPostComment.comment = this.commentContent;
      this.userPostCommentJSON = JSON.stringify(this.userPostComment);
      //console.log("Comment JSON is "+this.userPostCommentJSON);

      this.https.post(this.serviceUrl+'comments',this.userPostCommentJSON,this.httpOptions)
        .subscribe(
            (res: any)=>{
              this.commentContent = "";
              this.refresh();
              setTimeout(() => {
                console.log("In Timeout");
                this.refreshPostComments("");
                this.events.publish('postComment:created', {
                  id: res.id,
                  time: new Date()
                }); 
                this.hideLoader(); 
                this.commentContent = "";    
              },2000)
              },
              err => {
                  this.hideLoader();
                  this.showAlert(err);
              }
        );
    }
  }

当我从故事转到评论页面时,这就像魅力一样。

这是我的问题。如果我从 oneSignal 推送通知导航到“评论”页面,在我输入新评论之前一切正常。当我输入新评论时,评论是使用 RESTAPI 在数据库中创建的(工作正常),在打字稿中调用 refreshPostComments 方法(工作正常),但我的视图在我实际点击之前不会更新再次评论框。

我不知道我做错了什么。但是在我的 app.component.ts 中,我检查是否点击了 oneSignal 通知,如果点击了,我会这样做

if (localStorage.getItem('auth-user') != undefined || null) {
      if (additionalData.type == "comment") {
        await console.log("Going to Comments");
        this.router1.navigateForward(['/comments', {
          userId: parseInt(additionalData.userId),
          username: additionalData.username,
          userPostId: parseInt(additionalData.userPostId),
          description: additionalData.description,
          profileNameKey: additionalData.profileNameKey
        }]);
      }

行得通。带我到评论页面。但是一旦进入页面,我几乎可以像 peach 一样做其他所有事情,除非我添加评论,然后它不会实时反映。

关于我遗漏的任何指示?

JR

找到我的解决方案。我认为 Angular 的更改检测是由某些事件触发的,当我从 OneSignal 的通知导航到页面时 - 无论 OneSignal 使用什么,它都没有进入 Angular 的雷达。所以我必须导入 ChangeDetectorRef 并执行手动 detectChanges() 以确保 ngFor 会在更改发生时立即检测到它们。

呸。在这上面花了将近半天时间。 OneSignal 和 Angular 对 OneSignal 的怪癖就这么多了。而 Ionic 与它无关。

此致, JR