Угловое сравнение двух значений массива с помощью ngIf, чтобы показать кнопку - PullRequest
0 голосов
/ 15 мая 2019

Я работаю над двумя массивами с условием ngIf else, я получил два значения массива из двух таблиц: posts [post_id, user_id, description], лайков [post_id, user_id, like_status, like_id]. Здесь мне нужно сравнить post_id, user_id и like_status = 'like', если они равны, тогда условие true показывает кнопку успеха, иначе false кнопку по умолчанию.

Я уже пробовал, но он не работает, поэтому, пожалуйста, помогите сравнить два массива при использовании ngIf else.


<div class="container" *ngFor="let post of posts; let i = index">
   <h6> {{post.description}} </h6>

    <div class="container" style="border: 0px solid #ada5a5; ">
        <div class="row">

          <!--like button-->
          <div class=" col-4">

              <div *ngIf="(postLikes.indexOf(user_id) > -1) && (post.post_id == postLikes.post_id) && (postLikes.like_status == 'like'); else default">
                <button type="button" class="btn btn-success" (click)=likeSubmit(post.user_id,post.post_id)>Liked</button><p>liked</p>
              </div>
                <ng-template #default>
                  <button type="button" class="btn btn-secondary" (click)=likeSubmit(post.user_id,post.post_id)>Like</button><p>like</p>
                </ng-template>
         </div>

        </div>

      </div>


  </div>


// two tables data
  posts: any[] =
    [{
    "post_id": 4,
    "user_id": 2,
    "description": " Hi How are you ",
    "created_date": "2019-01-28T12:30:49.000Z"
}, {
    "post_id": 5,
    "user_id": 2,
    "description": " Working a Fine ",
    "created_date": "2019-01-28T12:31:20.000Z"
}, {
    "post_id": 6,
    "user_id": 2,
    "description": " Hi How are you ......",
    "created_date": "2019-01-28T12:32:15.000Z"
}, {
    "post_id": 7,
    "user_id": 2,
    "description": " 4th test post",
    "created_date": "2019-01-29T07:10:37.000Z"
}, {
    "post_id": 9,
    "user_id": 2,
    "description": " 5th test post",
    "created_date": "2019-01-31T11:17:31.000Z"
}, {
    "post_id": 10,
    "user_id": 2,
    "description": " 6th test post",
    "created_date": "2019-01-31T12:03:54.000Z"
}, {
    "post_id": 11,
    "user_id": 2,
    "description": " 7th post post",
    "created_date": "2019-02-08T05:50:02.000Z"
}, {
    "post_id": 12,
    "user_id": 2,
    "description": " 8th test post ",
    "created_date": "2019-02-08T06:08:01.000Z"
}];

  postLikes:any[] =[{
    "post_id": 4,
    "user_id": 2,
    "like_status": "unlike",
    "like_id": 10
}, {
    "post_id": 5,
    "user_id": 2,
    "like_status": "like",
    "like_id": 9
}, {
    "post_id": 6,
    "user_id": 2,
    "like_status": "like",
    "like_id": 8
}, {
    "post_id": 7,
    "user_id": 2,
    "like_status": "like",
    "like_id": 7
}, {
    "post_id": 9,
    "user_id": 2,
    "like_status": "like",
    "like_id": 11
}];
  post_id: any;
  user_id:Number = 2;
  // likes: Like[];
  like_id: number | null ;
  like_status: string;





Пожалуйста, попробуйте мой код StackBlitz один раз и исправьте ошибку

https://stackblitz.com/edit/angular-wddupe?file=src%2Fapp%2Fapp.component.ts

Ответы [ 3 ]

1 голос
/ 15 мая 2019

Я обновил код, пожалуйста, найдите изменения

https://stackblitz.com/edit/angular-yjcpfk?file=src/app/app.component.html

Надеюсь, это поможет вам.

0 голосов
/ 15 мая 2019

Один из способов сделать это

  1. Создать открытый метод в вашем компоненте как

    public isPostLikedByUser(postID: any, userID: any){
        // This is actually matching the criteria exactly as you have described in question RETURN true or false
        return this.postLikes.findIndex((i) => i.post_id == postID && i.user_id == userID && i.like_status == 'like') > -1;
    }
    
  2. Теперь вызовите этот метод по вашему мнениюкак

     <div *ngIf="isPostLikedByUser(post.post_id, post.user_id); else otherTest">
    

Я также обновил ваш пример стекаблица.Надеюсь, это поможет.

https://stackblitz.com/edit/angular-wddupe?embed=1&file=src/app/app.component.html

0 голосов
/ 15 мая 2019

Существует проблема с условием postlikes в HTML, вы сравниваете строку с массивом Ngfor для postlikes массив остается

Я рекомендую вам сделать это в машинописном тексте, используя ключевое слово find, чтобы сравнить и передать полученный результат для объектов записей, таких как логические, из того, что он показывает и скрывает вашу кнопку

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...