Многоразовый угловой компонент имеет те же данные, что и предыдущий - входной список данных

Я пытаюсь создать простой повторно используемый компонент - поле ввода со списком данных, которое отображается в виде раскрывающегося списка. Все в порядке, за исключением того, что когда я пытаюсь повторно использовать этот компонент, все списки содержат данные, такие же, как и первый компонент на веб-странице. Компонент называется app-reuable-filter, и вот как он вызывается:

    <app-reuable-filter 
        [params] = "{filterName: 'tktNum', filterLabel: 'Ticket Number...'}"
        (filterChosen) = "onFilterChosen($event, 'tktNum')"
    ></app-reuable-filter>
    <app-reuable-filter 
        [params] = "{filterName: 'assigned', filterLabel: 'Assigned To...'}"
        (filterChosen) = "onFilterChosen($event, 'assigned')"
    ></app-reuable-filter>


Компонент HTML

<div class = "col">
    <input 
        type = "text" class = "form-control" list = "dl1" (click) = "clearFilter()" (change) = "fireEvent()"
        [placeholder] = "params.filterLabel" [(ngModel)] = "chosenValue"
    >
    <datalist id = "dl1"> 
        <option *ngFor = "let _ of listOfVals">{{ _.valueField }}</option>
    </datalist>
</div>

Машинопись

import { Component, EventEmitter, OnInit, Output, Input } from '@angular/core';

@Component({
  selector: 'app-reuable-filter',
  templateUrl: './reuable-filter.component.html',
  styleUrls: ['./reuable-filter.component.css']
})
export class ReuableFilterComponent implements OnInit {
  listOfVals: {}[] = [];
  chosenValue: string;
  @Input() params: any;
  @Output('filterChosen') filterClicked = new EventEmitter<string>();
  
  constructor() { }

  ngOnInit(): void {
    this.fetchFilters();
  }

  fetchFilters(): void {
    if (this.params.filterName === "assigned") this.listOfVals.push({ valueField : 'a1'});
    else this.listOfVals.push({ valueField : 'b1'});
  }

  clearFilter(): void {
    this.chosenValue = '';
    this.fireEvent();
  }

  fireEvent(): void {
    this.filterClicked.emit(this.chosenValue);
  }
}

После этого я ожидаю увидеть два входа с раскрывающимися списками с заполнителями в них как «Номер билета ...» и «Назначено ...» соответственно. И это то, как это показано, но я также ожидаю увидеть «b1» и «a1» как отдельные элементы в раскрывающихся списках соответственно. Чего я не знаю; оба списка содержат "b1" в качестве единственного элемента, который можно выбрать.

Если я попытаюсь повторно использовать этот компонент еще раз, то независимо от того, что я укажу в методе «fetchFilters()», я все равно увижу «b1» как единственный элемент, который можно выбрать в этом новом компоненте. Я знаю, что значения, передаваемые в «params», достигают метода «fetchFilters()», я проверил с помощью console.info.

Я не понимаю, почему это происходит и как мне убедиться, что списки загружаются с правильными значениями, которые я предоставляю? Должен ли я отделять параметр «список» от «входного тега» для каждого компонента вместо жесткого кодирования как «dl1»?

Поведение ключевого слова "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) для оценки ваших знаний,...
1
0
409
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Я обнаружил проблему, это действительно был параметр «список», который должен быть динамическим, иначе он продолжает указывать на первый список, который создается из-за жестко заданного значения «dl1». Ниже приведен код того, как я это исправил (компонентный HTML)...

<div class = "col">
    <input 
        type = "text" class = "form-control" [attr.list] = "params.filterName" (click) = "clearFilter()" 
        (change) = "fireEvent()" [placeholder] = "params.filterLabel" [(ngModel)] = "chosenValue"
    >
    <datalist [id] = "params.filterName"> 
        <option *ngFor = "let _ of listOfVals">{{ _.valueField }}</option>
    </datalist>
</div>

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