NgSwitchCase нет провайдера

Я смотрел учебник и пытался сделать то, что я узнал. Я получил сообщение об ошибке ниже. Я не мог понять, почему у меня есть это сообщение об ошибке в консоли браузера. Он говорит [ERROR ->]<span *ngSwitchCase = "true">, но я не знаю, почему он говорит, что ngSwitchCase неверен. .Проверил все файлы и код, но проблем вроде нет. Где моя ошибка?

ОШИБКА

Uncaught Error: Template parse errors:
No provider for NgSwitch ("       <td>{{item.description}}</td>
              <td [ngSwitch] = "item.action"></td>
              [ERROR ->]<span *ngSwitchCase = "true">
                  Yes
              </span>
"): ng:///AppModule/AppComponent.html@25:14
No provider for NgSwitch ("
                  Yes
              </span>
              [ERROR ->]<span *ngSwitchCase = "false">
                  No
                </span>
"):

app.component.html

  <table class = "table table-striped table-bordered">
                <thead>
                   <tr>
                     <th></th>
                     <th>Description</th>
                     <th>Action</th>
                   </tr>
                </thead>
                <tbody>
                <tr *ngFor = "let item of items;let i=index">
                  <td>{{i+1}}</td>
                  <td>{{item.description}}</td>
                  <td [ngSwitch] = "item.action"></td>
                  <span *ngSwitchCase = "true">
                      Yes
                  </span>
                  <span *ngSwitchCase = "false">
                      No
                    </span>
                </tr>
                </tbody>
              </table>

app.comonent.ts

export class AppComponent {

  items:Model[]= [
    new Model('Breakfast',false),
    new Model('Sport',false),
    new Model('Studying',true),
    new Model('Cemo',false),
  ]
}

Модель.ts

export class Model
{
   description:string;
   action:Boolean;
   constructor(description:string,action:Boolean)
   {
       this.description=description;
       this.action=action;
   }
}

попробуйте сделать так: [ngSwitch] = "{{item.action}}"

Shivani Sonagara 25.07.2019 09:14

@ShivaniPatel Я сделал, но не сработало

Timuçin Çiçek 25.07.2019 09:17
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
2
1 938
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

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

Вы должны обернуть свой диапазон внутри тега td, как это, потому что директива ngSwitch является областью действия для элемента td, а не вне элемента td

<td [ngSwitch] = "item.action">
    <span *ngSwitchCase = "true">
              Yes
    </span>
    <span *ngSwitchCase = "false">
            No
    </span>
  </td>

Если вам нужно выбрать только одну из двух альтернатив, вы также можете использовать *ngIf-else: https://ultimatecourses.com/blog/angular-ngif-else-then

вы должны сначала применить [ngSwitch] к родительскому элементу, чтобы вести себя как контейнер для ваших случаев переключения и «предоставить» вам условие, которое вы проверяете/сравниваете, чтобы применить/отобразить любой из ваших случаев переключения в дочерних элементах, которые встретились условие родителя любого типа (свойство/поле/метод/функция).

поэтому родительский элемент работает как «Поставщик»

ОШИБКА: в NodeInjector не найден провайдер для NgSwitch.

<div>
    <p *ngSwitchCase = "true">
              Yes
    </p>
    <p *ngSwitchCase = "false">
            No
    </p>
</div>

с провайдером и без ошибок:

<div [ngSwitch] = "something">
    <p *ngSwitchCase = "true">
              Yes
    </p>
    <p *ngSwitchCase = "false">
            No
    </p>
</div>

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