публичные методы класса не видны в TypeScript / Angular - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть класс машинописного текста, как показано ниже:

import { Injectable } from '@angular/core';
import { Router, ActivatedRoute } from '@angular/router';

@Injectable()
export class RouteParamsService {
  public router : ActivatedRoute;

  constructor(){};

  public getRouteParams(){
      return this.router;
  }

}

Я использую его в своем компоненте, как показано ниже:

import { ListItem } from "../../../shared/models/listItem.model";
    import { RouteParamsService } from '../../../shared/services/routeParams.service';

    export class CheckGroupsFilterValues {
        private route = new RouteParamsService();
        public rgr: string[] = []; //responsibilityGroups
        public sys: string[] = []; //systems
        public app: string[] = []; //applications
        public cgr: string[] = []; //checkGroups
        public cgi: string[] = []; //checkGroupInstances
        public nat: string; //needsAttentions

        constructor(){
            this.rgr = ["MULTI_MULTI_Vale_Sellout (4213)"];
            this.sys = ["MULTI_MULTI_Vale_Sellout (4213)"];
            this.app = ["MULTI_MULTI_Vale_Sellout (4213)"];
            this.cgr = ["MULTI_MULTI_Vale_Sellout (4213)"];
            this.cgi = ["MULTI_MULTI_Vale_Sellout (4213)"];

            console.log(this.route);
        }

    }

Проблема заключается в следующем: console.log(this.route) дает следующий выводRouteParamsService {}.Открытый метод getRouteParams(), определенный в классе, вообще не виден, хотя я уже создал экземпляр.

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Вам нужно пропустить роутер через конструктор

constructor(
    private _route: ActivatedRoute, // <-- Usefull
    private _router: Router,
  ){}

https://angular.io/guide/router

0 голосов
/ 06 февраля 2019

Здесь есть несколько неправильных вещей.

1- router из RouteParamsService всегда будет undefined, поскольку оно нигде не назначается.Для правильного ввода необходимо ввести значение constructor в onder.

constructor(public router : ActivatedRoute){};

2- private route = new RouteParamsService(); не создает службу Angular.Чтобы внедрить ActivatedRoute в конструктор службы, либо это должен быть сервис Angular (инъецируемый), либо вы должны сделать это вручную.Таким образом, если вы создаете сервис с помощью new, вам нужно передать ActivatedRoute для обслуживания вручную.

Вы можете использовать Injector (https://angular.io/api/core/Injector), чтобы вручную вводить инъекционные формы в свои пользовательские классы.

ОБНОВЛЕНИЕ

Чтобы внедрить Angular, вводимый в пользовательский класс, вы можете использовать Injector.

Сначала экспортируйте экземплярInjector из функционального модуля (во избежание циклических зависимостей) и импортируйте функциональный модуль в модуль приложения

export let InjectorInstance: Injector;

@NgModule(
 /* *** */
)
export class MyFeatureModule {
  constructor(private injector: Injector) {
    InjectorInstance = this.injector;
  }
}

-----

@NgModule(
     imports: [
       ...,
       MyFeatureModule,
       ...
     ]
)
export class AppModule {}

Затем в свой пользовательский класс импортируйте InjectorInstance из функционального модуля и используйтечтобы получить инъекционную справку:

import {InjectorInstance} from 'path/to/my-feature-module.module';

export class CheckGroupsFilterValues {
   private route = InjectorInstance.get<RouteParamsService>(RouteParamsService);
};

И не забудьте предоставить свои услуги в root

@Injectable({
  providedIn: 'root'
})
export class RouteParamsService {...}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...