* ngIf только в том случае, если он соответствует значению в массиве в firestore

#angular #google-cloud-firestore

#angular #google-cloud-firestore

Вопрос:

Я работаю в Firestore, я пытаюсь показать изображение, только если uid пользователя соответствует значению массива. Может кто-нибудь дать мне представление о том, как это сделать?

До сих пор мне удавалось это делать, но со строкой, и она работает хорошо: введите описание изображения здесь

 <div *ngIf="auth.user | async as user">
  <img *ngIf="evento.favoritos2 === user.uid " src="assets/icons/Icon_bookmark02.svg" alt="iconFavorito">
</div>
  

Но в случае массива, как бы это было?
введите описание изображения здесь

Я пробовал это, но это не сработало:

 <div *ngIf="auth.user | async as user">
  <img *ngIf="evento.indexOf(favoritos) === user.uid " src="assets/icons/Icon_bookmark02.svg" alt="iconFavorito">
</div>
  

Комментарии:

1. Какое значение evento? indexOf возвращает индекс в виде числа. Таким образом, number === string всегда равно false . Также вы не можете передать массив в indexOf.

Ответ №1:

Если вы хотите проверить, содержит ли массив favoritos идентификатор пользователя, вы можете использовать метод find .

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find

Но вы не можете использовать методы массива внутри *ngIf директивы.

Вы должны подписаться на свой auth, наблюдаемый внутри вашего файла component.ts.

Вот пример:

component.ts

 ngOnInit() {
    this.auth.subscribe( user => {
        this.user = user;
        this.showImage = this.evento.favoritos.find(element => element === user.uid);
    }
}
  

component.html

 div *ngIf="user">
<img *ngIf="showImage" src="assets/icons/Icon_bookmark02.svg" alt="iconFavorito">
</div>
  

Я не знаю вашего точного кода, поэтому вам, возможно, придется немного изменить код. И не забудьте отписаться внутри ngOnDestroy .

Комментарии:

1. Я пытался, но получаю следующую ошибку: Parser Error: Bindings cannot contain assignments at column 33 in [evento.favoritos.find(element => element === user.uid)] in @78:29Angular

2. Мой плохой, вы не можете использовать методы массива внутри a *ngIf . Я отредактировал свой ответ.

Ответ №2:

Метод indexOf() выполняет поиск в массиве указанного элемента и возвращает его позицию, а не True / False

favoritos — это массив, и вы проверяете индекс на evento

   <img *ngIf="evento.favoritos.indexOf(user.uid) !== -1" src="assets/icons/Icon_bookmark02.svg" alt="iconFavorito">