Как использовать if else с AngularJS

#angularjs

#angularjs

Вопрос:

Я пытаюсь использовать if else с angular для фильтрации изображений с контроллера. Я пытаюсь показать изображение с моим списком, если оно существует, а если нет, то оно показывает изображение-заполнитель.Я новичок в angular, может кто-нибудь, пожалуйста, посоветуйте.

Я попробовал некоторые онлайн-решения для использования с ним, например

  <div *ngIf="{{item.icon}}; else templateName">
   <img ng-src = "{{item.icon}}" />
 </div>
 <ng-template #templateName>
    <img ng-src = "{{item.placeholderImage}}" />
  </ng-template>
 

Я создал этот компонент, который я пытаюсь вызвать в своем индексном файле. Я также не могу отобразить даты, которые работали до того, как я перенес их в компонент. Я думаю, что с запятыми что-то не так.
{{date | date:"EEE MMM dd yyyy"}}

   module('cListApp').
  component('itemsList', {
    template:<ul> 
    <li class="list-body-container" ng-repeat="item in $ctrl.items"> 
        <div class="profileImage"> 

        </div> 
        <div class="list-body-left"> 
            <div class="li-title"><h2>{{item.name}}</h2><h4>Title3</h4></div> 
            <div class="li-body"><p>{{item.snippet}}</p></div> 
            <div class="li-date"> 
                <div id="calendar"> 
                    <div id="c-top"> 
                        <span id="l1"></span> 
                        <span id="l2"></span> 
                    </div> 
                    <div id="c-mark"></div> 
                </div> 
                {{date | date:"EEE MMM dd yyyy"}}
            </div>
        </div>
        <div class="list-body-right">
        </div>
    </li>
</ul>,
controller: function cListController() {
      this.items = [
        {
            name: 'Nexus S',
            snippet: 'Fast just got faster with Nexus S.',
            icon: 'https://picsum.photos/100/100/?image=491'
        }, {
            name: 'Motorola XOOM™ with Wi-Fi',
            snippet: 'The Next, Next Generation tablet.'

        }, 

      ],
      this.placeholderImage = 'https://picsum.photos/100/100/?blur',
      this.date = new Date();
    }
  });```
 

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

1. Что такое ng-src? Вы имеете в виду использовать [src]=“item.icon” ? Чтобы присвоить атрибуту src динамическое значение?

2. Я думаю, что ng-src — это угловая директива для отображения источника изображения в приложении. Я думаю, что это может быть похоже на [src], я считаю

3. ng-src является директивой angularjs. *ngIf является угловой директивой. Похоже, ты занимаешься angularjs? Что должно было быть ng-if ?

4. Пожалуйста, уточните, какую версию Angular вы конкретно используете.

5. Я думаю, что я использую AngularJS 1.7.x

Ответ №1:

Вместо использования ng-if просто используйте выражение:

СЛОЖНО

 <div>
   <img ng-if="item.icon"   ng-src = "{{item.icon}}" />
   <img ng-if="!item.icon"  ng-src = "{{$ctrl.placeholderImage}}" />
</div>
 

Проще

 <img ng-src = "{{item.icon || $ctrl.placeholderImage}}" />
 

Для получения дополнительной информации см.

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

1. Это потрясающе с точки зрения простоты. Я думал об использовании простого троичного, но это превосходит его на мили: D: D

2. Спасибо, это работает с некоторыми изменениями в объекте данных контроллера.

Ответ №2:

Ваш код написан на AngularJS, а в AngularJS нет такого понятия, как ng-else в angular. Чтобы сделать эту работу, вы можете использовать ng-if or ng-show из AngularJS.

 <div>
   <img ng-if="item.icon"   ng-src = "{{item.icon}}" />
  <img ng-if="!item.icon"  ng-src = "{{item.placeholderImage}}" />
 </div>
 

Что это будет делать, так это если значок присутствует, первое изображение будет показано с item.icon в качестве URL-адреса изображения, а если нет, условие во втором теге img будет истинным, а второе будет показано с изображением-заполнителем

Ответ №3:

У меня это работает с помощью приведенного ниже выражения.

<img ng-src = "{{item.icon || item.placeholderImage}}" />

Тем не менее, мне нужно внести несколько изменений в контроллер, с которого он отображает данные

 controller: function cListController() {
      this.items = [
        {
            name: 'Nexus S',
            snippet: 'Fast just got faster with Nexus S.',
            icon: 'https://picsum.photos/100/100/?image=491'
        }, {
            name: 'Motorola XOOM™ with Wi-Fi',
            snippet: 'The Next, Next Generation tablet.'
        }, 

      ],
      this.placeholderImage = 'https://picsum.photos/100/100/?blur',
      this.date = new Date();
    }
 

Вместо этого он находится за пределами первого массива, я должен поместить изображение-заполнитель внутри массива

 {
 name: 'Nexus S',
 snippet: 'Fast just got faster with Nexus S.',
 icon: 'https://picsum.photos/100/100/?image=491'
},
{
  name: 'Motorola XOOM™ with Wi-Fi',
  snippet: 'The Next, Next Generation tablet.',
  placeholderImage = 'https://picsum.photos/100/100/?blur',
}, 
 

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

1. Если заполнитель находится за пределами массива, используйте <img ng-src = "{{item.icon || $ctrl.placeholderImage}}" /> . Или используйте строковый литерал, <img ng-src = "{{item.icon || 'https://picsum.photos/100/100/?blur'}}" />