Передача параметра методу внутри ngOnInit даже не вызывает службу, ничего не регистрирует

На предыдущей странице компонентов, которую я сделал, когда вы нажимаете кнопку, вы переходите к другому компоненту с помощью навигации. Учитывая, что мне пришлось написать два параметра, один для текущего пути, а второй для следующего, когда я пытаюсь подписаться на него, он дает мне объект с двумя элементами.

onSelect(subCategory) {
    this.router.navigateByUrl(
      `web-shop/categories/${this.type}/${subCategory.nextType}`
    );}

В ngOnInit я поймал этот объект, превратил его в массив и передал его значение другой переменной. Затем я взял второй элемент массива. Когда я вызвал метод внутри this.products, как показано ниже в коде, и отфильтровал его, а затем зарегистрировал его, я ничего не получил в console.log, даже несмотря на то, что я передаю фактическое значение, которое мне нужно, и я проверил, есть ли значение это то, что мне нужно. Но по какой-то причине я ничего не получаю для console.log для this.products, даже массив или значение.

import { Component, OnInit } from "@angular/core";
import { Router, ActivatedRoute } from "@angular/router";
import { Subscription } from "rxjs";
import { SingleProductModel } from "./../../Models/webshopModels/single-product.model";
import { SingleProductService } from "./../../Services/webshopServices/single-product.service";

@Component({
  selector: "app-products",
  templateUrl: "./products.component.html",
  styleUrls: ["./products.component.scss"],
})
export class ProductsComponent implements OnInit {
  type: string;
  products: SingleProductModel[];
  s: string;
  type1: Array<any>;
  constructor(
    private productsService: SingleProductService,
    private route: ActivatedRoute,
    private router: Router
  ) {}

  ngOnInit() {
    this.route.params.subscribe((data) => {
      this.type1 = Object.values(data);
      console.log(this.type1);
      this.type = this.type1[1];
      console.log(this.type);
      this.products = this.productsService
        .getCategoryProducts()
        .filter((a) => (a.type = this.type));
      console.log(this.products);
    });
  }
}

И даже пробовал фильтровать внутри самого сервиса. Не в том примере, который я отправил.

  getCategoryProducts() {
    return this.product.slice();
  }

person Drexx_Dusan    schedule 22.02.2021    source источник
comment
Возможно, вам нужно инициализировать массив пустым массивом при его объявлении. products: SingleProductModel[] = [] type1: Array<any> = [] Как массив нужно инициализировать.   -  person Belle Zaid    schedule 22.02.2021
comment
@BelleZaid да, это ничего не дало. Так глупо, это должно сработать, я не понимаю, значение, которое я получаю, должно быть в состоянии прочитать. Это равносильно тому, что я сам передаю туда постоянное значение. Метод должен выполняться, но я не понимаю, что в журнале ничего не отображается   -  person Drexx_Dusan    schedule 22.02.2021
comment
Возможно, вы можете использовать Object.keys(data) или (<any>Object).values(data), как указано в ответе здесь, вы можете посмотреть обсуждение использования Object.values(data) в TS   -  person Belle Zaid    schedule 22.02.2021
comment
@BelleZaid tnx я попробую это   -  person Drexx_Dusan    schedule 22.02.2021


Ответы (2)


В операторе фильтра вы фактически использовали = его присвоение, а не сравнение.

Вместо = используйте == или ===.

    this.productsService
        .getCategoryProducts()
        .filter((a) => (a.type === this.type))
        .subscribe(products => this.products = products);

person HKR    schedule 22.02.2021
comment
Я снова совершил ту ошибку xd. Но все равно не исправил. Все еще даже не показывает это, когда я пытаюсь его зарегистрировать. Нет пустого массива, ничего, не правда ли? - person Drexx_Dusan; 22.02.2021
comment
если продукт категории get является вызовом API, подписка, - person HKR; 25.02.2021
comment
Решил, напечатаю. - person Drexx_Dusan; 27.02.2021

Итак, я решил проблему. Проблема заключалась в том, что у меня был метод в модели, из-за которого моя программа не работала и ломалась, потому что я вызвал функцию из службы обзора продукта внутри службы продукта, а этот метод, который нарушил код, был внутри модели обзора продукта. . Я что-то пробовал, и это было глупо. Всем спасибо за помощь.

person Drexx_Dusan    schedule 26.02.2021