typescript - Angular 7 TypeError: service.x bir fonksiyon değil


Bir yönlendirme servisi oluşturdum ve bunu gezinme bileşenime enjekte etmek istiyorum. Ancak, üzerinde bir yöntem çağırdığımda TypeError: routingService.getRequestedPage is not a function hatası alıyorum. Dün başka bir servisle çok benzer bir sorun yaşamıştım, maalesef bunu nasıl çözdüğümü unuttum. Servisi terminalden oluşturdum.

src/app/nav/nav.component.ts yapıcı:

constructor(private templateService: TemplateService, private routingService: RoutingService) {
    this.getTemplates();
    if (this.routingService.getRequestedPage() === 'home') {
      this.showHome();
    }
  }

src/app/nav/nav.component.ts içe aktar:

import {RoutingService} from '../shared/routing.service';

src/app/shared/routing.service.ts:

import { Injectable } from '@angular/core';

@Injectable({
  providedIn: 'root'
})
export class RoutingService {

  private requestedPage: string;

  constructor() {
    this.requestedPage = 'home';
  }

  requestPage(page: string) {
    this.requestedPage = page;
  }

  getRequestedPage() {
    return this.requestedPage;
  }
}

Cevap #1

Sadece providedIn kısmını koymak yerine @Injectable() yazın, ardından app.module.ts dosyanızda servisi providers altında ekleyin. Sonra yazdığınızda

constructor(private whateverService: WhateverService) {
}

Herhangi bir bileşende hatasız erişiminiz olmalıdır. Parçacıkta bunu özel (private) olarak gördüm ama bu her zaman beni şaşırtan bir durum, bu yüzden yapıcıya enjekte ederken bunu özel olarak ayarladığınızdan emin olun.

Cevap #2

Bu problem ayrıca döngüsel bir bağımlılık yaratılmasından da kaynaklanabilir. Eğer servis A, servis B'ye enjekte edilmişse ve servis B de servis A'ya enjekte edilmişse, servis B'den A.foo() çağrısı yapmak "A.foo() bir fonksiyon değil" hatasına yol açar. Aslında, A doğru şekilde örneklendirilmeyecek ve hiçbir metoda veya özelliğe sahip olmayacaktır.

İlgili makaleler