#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">