Как избежать пробелов в циклах * ngFor в angular?

Я создаю компонент звездного рейтинга в Angular, используя потрясающийfa fa-star и far fa-star.

Это вывод HTML, который я хочу использовать внутри своего компонента.

<div style = "font-size: 80%">
    <i class = "fa fa-star"></i>
    <i class = "fa fa-star"></i>
    <i class = "fa fa-star"></i>
    <i class = "fa fa-star"></i>
    <i class = "far fa-star"></i>
</div>

Как избежать пробелов в циклах * ngFor в angular?

Если я сделаю это с помощью Loop, я каким-то образом получу пробелы между звездами.

<div style = "font-size: 80%">
    <ng-container *ngFor = "let i of [1,2,3,4,5]">
        <i class = "{{i <= 4 ? 'fa' : 'far'}} fa-star"></i>
    </ng-container>
</div>

Как избежать пробелов в циклах * ngFor в angular?

Но это исправляется путем создания цикла oneliner. Таким образом, либо удаление новой строки в коде, либо переключение части *ngFor... на тег <i> и удаление <ng-container> решит проблему.

<div style = "font-size: 80%">
    <ng-container *ngFor = "let i of [1,2,3,4,5]"><i class = "{{i <= 4 ? 'fa' : 'far'}} fa-star"></i></ng-container>
</div>

<!-- Both work -->

<div style = "font-size: 80%">
    <i *ngFor = "let i of [1,2,3,4,5]" class = "{{i <= 4 ? 'fa' : 'far'}} fa-star"></i>
</div>

So how do I achieve this without making sure that the ngFor loop is only on one line?

How to prevent the space when the iteration body has a newline?

Итак, вы хотите, чтобы без цикла for? Так что попробуйте жестко закодированную иконку

Prashant Pimpale 28.05.2019 07:30

Добавление *ngFor к ngContainer реплицирует это, а не только <i>, и лучше использовать его только там, где он вам нужен, что в данном случае находится непосредственно в теге <i>, как вы сделали в следующем примере. Это не пробелы, это сам ngContainer вызывает пробелы. Вы достаточно лаконичны, чтобы не требовать дальнейших изменений во втором случае. Не чини то, что не сломано.

Ajit Panigrahi 28.05.2019 07:30

@PrashantPimpale Нет, жестко закодированный вариант предназначен только для демонстрации.

LuckyLikey 28.05.2019 08:34

@LuckyLikey На самом деле не могу понять вопрос! Можете ли вы описать это? с ожидаемым и текущим результатом!

Prashant Pimpale 28.05.2019 08:39

@AjitZero хорошее замечание. Однако, хотя <ng-container> не отображается в разметке HTML, я не понимаю, почему он вставляет новые строки.

LuckyLikey 28.05.2019 08:40

@PrashantPimpale первый, жестко запрограммированный вариант - это ожидаемый результат. Я пытался сделать это динамически, это второй кодовый блок. Но это неловко добавило несколько пробелов. Поэтому я понял, как решить это в 3-м кодовом блоке. Вопрос как написано в заголовке как избежать пробелов в циклах * ngFor в angular?

LuckyLikey 28.05.2019 08:43

@LuckyLikey не может воспроизвести:stackblitz.com/edit/angular-23ozms

Prashant Pimpale 28.05.2019 09:26

@PrashantPimpale интересно. Знаете ли вы, если stackblitz использует окончание строки в стиле unix? Я использую Windows кстати.

LuckyLikey 28.05.2019 10:15

@LuckyLikey На самом деле я точно не знаю!

Prashant Pimpale 28.05.2019 10:59

@PrashantPimpale не смог найти никакой информации об этом. Однако пользователь rh16, похоже, может его воспроизвести. В любом случае, спасибо.

LuckyLikey 28.05.2019 11:25
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
2
10
649
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это результат того, что теги <i> встроены, поэтому HTML рассматривает пробелы между ними как пробел.

Одним из обходных путей было бы установить размер шрифта равным нулю и отменить его для дочерних элементов:

<div style = "font-size: 0">
    <ng-container *ngFor = "let i of [1,2,3,4,5]">
        <i style = "font-size: 80%" class = "{{i <= 4 ? 'fa' : 'far'}} fa-star"></i>
    </ng-container>
</div>

Подробнее о проблеме и этом и других решениях можно прочитать в эта статья.

звучит примерно так. Странно, почему я сам не нашел эту статью. Спасибо.

LuckyLikey 28.05.2019 08:34

Другие вопросы по теме