Не получить событие от немого компонента

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

// planet-data.component.html (Умный компонент)

<div class = "main">
    <app-loading *ngIf = "loading"></app-loading>
    <app-planet-view [pics] = "pics" class = "fixed" (selected) = "onSelect($event)"></app-planet-view>
</div>

// planet-data.component.ts

onSelect(event: Cam) {
    if (event.name === 'CHEMCAM') {
      this.loading = true;
      this.getCamType();
    } else {
      this.loading = true;
      event.name === 'NAVCAM' ? this.getCamType('spirit', 'navcam') : this.getCamType('opportunity', 'fhaz');
    }
  }

// dropdown-menu.component.html (тупой компонент)

<p-dropdown [options] = "cameras" [(ngModel)] = "selectedCam" placeholder = "Select a Cam" optionLabel = "name"
            (ngModelChange) = "getDisplayCam($event)">
</p-dropdown>

// dropdown-menu.component.ts

getDisplayCam(event: Cam) {
    this.selected.emit(event);
  }

// planet-view.component.html (еще один тупой компонент)

<div *ngIf = "pics">
  <div *ngFor = "let pic of pics.photos">
    <div class = "card" style = "width: 16rem;">
      <img class = "card-img-top" src = "{{pic.img_src}}" alt = "Card image cap">
      <p>{{pic.earth_date | date}}</p>
    </div>
  </div>
  <h4>{{title}}</h4>
  <app-dropdown-menu></app-dropdown-menu>
</div>

пожалуйста, поделитесь URL-адресом stackblitz для сценария. это поможет, и другие смогут лучше понять код.

RANJIT PATRA 09.12.2018 09:07

Спасибо, но у меня проблема со stackblitz, ни один из вопросов stackoverflow не решает эту проблему. Так что я на нем. Тогда я поделюсь своим проектом, у меня он только что есть на гитхабе. На самом деле не знаю, использую ли я вывод в правильном вложенном компоненте, и я пробовал много способов

Nacho 09.12.2018 20:25

Вот мое приложение, несмотря на то, что оно не работает в Stackblitz (оно работает локально, и я пробовал даже опубликованные вопросы об этом из stackoverflow) stackblitz.com/github/NachoBFL/ScientificApp

Nacho 10.12.2018 01:27

добавлен ответ, пожалуйста, проверьте один раз. Код доступен в stackblitz.com/edit/….

RANJIT PATRA 10.12.2018 06:55

Что ж, похоже, у меня снова и снова возникала одна и та же ошибка в stackblitz. В любом случае спасибо, это сработало локально

Nacho 10.12.2018 16:14
Тестирование функциональных 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
1
5
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы не генерируете событие selected в PlanetViewComponent. Фактическое событие selected возникает из DropdownMenuComponent. Если вы не испустите событие selected из PlanetViewComponent, вы не сможете его прослушивать в PlanetDataComponent.

Код planet-view.component.html.

<div *ngIf = "pics">
  <div *ngFor = "let pic of pics.photos">
    <div class = "card" style = "width: 16rem;">
      <img class = "card-img-top" src = "{{pic.img_src}}" alt = "Card image cap" routerLink = "/detail">
      <p>{{pic.earth_date | date}}</p>
    </div>
  </div>
  <!-- Added catching (selected) event -->
  <app-dropdown-menu (selected) = "selected.emit($event)"></app-dropdown-menu>
</div>

Код planet-view.component.ts ниже.

@Component({
  selector: 'app-planet-view',
  templateUrl: './planet-view.component.html',
  styleUrls: ['./planet-view.component.sass']
})
export class PlanetViewComponent implements OnInit {

  @Input() pics: Photo;

  // Added @Output() event
  @Output() selected = new EventEmitter<Cam>();
  constructor() {}

  ngOnInit() {
  }
}

Я мог бы отметить это и еще одну вещь, которая будет работать, находится внутри planet-data.component.html, поместите компонент nest <app-dropdown-menu> Итак, код: <app-dropdown-menu class = "align" (selected) = "onSelect($event)"></app-dropdown-menu> <div class = "main"> <app-loading *ngIf = "loading"></app-loading> <app-planet-view class = "fixed" [pics] = "pics"></app-planet-view> </div>. Спасибо за ваше время

Nacho 10.12.2018 16:19

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