Функция Javascript в Angular 10 не работает

#javascript #angular #angular10

#javascript #angular #angular10

Вопрос:

Я создал простой код, используя JavaScript для фильтрации данных из продукта в Angular 10. Но onkeyup в html не распознает функцию поиска в typescript. В чем может быть проблема?

URL-адрес StackBlitz: https://stackblitz.com/edit/angular-ivy-scaucq?file=src/app/app.component.html

Ответ №1:

 <input type="text" id="myInput" (keyup)="search()" placeholder="Search for product.." title="Type in a name">
  

Используйте (keyup) вместо onkeyup .

Ответ №2:

Согласно вашему примеру, было бы лучше так app.component.html

 <input
  type="text"
  id="myInput"
  (keyup)="search($event.target)"
  placeholder="Search for product.."
  title="Type in a name"
/>

<ul id="myProduct" *ngFor="let product of filteredProducts">
  <li>
    <a href="#">{{ product.name }}</a>
  </li>
</ul>
  

app.component.ts

 import { Component, OnInit, VERSION } from '@angular/core';
import { Product } from './product';
import { ProductGroup } from './product-group';
import { ProductService } from './services/product.service';
// import * as var from 'jquery';

@Component({
  selector: 'my-app',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css'],
})
export class AppComponent implements OnInit {
  constructor(private productService: ProductService) {}
  product: Product[];
  productGroup: ProductGroup[];
  availableProducts: Product[];
  filteredProducts: Product[];

  search(e) {
    this.filteredProducts = this.availableProducts.filter(
      (p) => p.name.toUpperCase().indexOf(e.value.toUpperCase()) > -1
    );
  }

  getProduct() {
    this.productService.getProductsSmall().then((products) => {
      this.availableProducts = products;
      this.filteredProducts = products;
    });
  }
  ngOnInit() {
    this.getProduct();
  }
}
  

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

1. Похоже, вы тоже не смогли устоять: D. Я бы предложил использовать мой подход, потому что он менее сложный.

Ответ №3:

Вам нужно использовать (keyup) , и я не мог удержаться, чтобы просмотреть ваш код. Использование document.getElement и так далее — это не угловой способ делать вещи. Это можно сделать намного проще. Пожалуйста, взгляните на мой Stackblitz: https://stackblitz.com/edit/angular-ivy-4bgobb?file=src/app/app.component.ts

 <input type="text" id="myInput" (keyup)="search(searchTerm)" [(ngModel)]="searchTerm"  placeholder="Search for product.." title="Type in a name">


<ul id="myProduct" *ngFor="let product of shownProducts">
    <li><a href="#">{{product.name}}</a></li>
</ul>
  
 constructor(private productService: ProductService) {}
  product: Product[];
  productGroup: ProductGroup[];
  availableProducts: Product[];
  shownProducts: Product[];

  public searchTerm = "";

  search(searchValue: string) {
    this.shownProducts = this.availableProducts.filter((product: Product) => product.name.toLowerCase().includes(searchValue.toLowerCase()));
  }

  getProduct() {
    this.productService
      .getProductsSmall()
      .then(products => ((this.availableProducts = products), this.search("")));
  }
  

Я добавил [(ngModel)] в ваш шаблон и заменил ваш javascript функцией фильтра.