ОШИБКА TypeError: _co.getAdmin не является функцией - PullRequest
2 голосов
/ 21 февраля 2020

Это приложение Angular и что-то не так с функцией getAdmin() в auth.service, но я понятия не имею, что. Когда я переместил эту функцию на app.component.ts и изменил на "getAdmin()" в HTML, все было в порядке, но мне нужна эта функция в обслуживании. Подскажите пожалуйста что не так и как можно это исправить.

PS. переменная admin возвращает 'true' или 'false' в виде строки. Это приложение электронной коммерции с аутентификацией пользователя, токеном, и теперь я пытаюсь добавить администратора.

auth.service.ts:

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Router } from '@angular/router';

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

 constructor(private http: HttpClient, private _router: Router) { }

getAdmin() {
    if (localStorage.getItem('admin') === 'true') return true;
    return false;
  }
}

app.component.ts:

import { Component } from '@angular/core';
import { AuthService } from './auth.service';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  constructor(private _authService: AuthService) {
  }
}

app.component. html:

<a class="nav-link" *ngIf="_authService.getAdmin()" routerLink="/admin" routerLinkActive="active">Admin</a>

Ответы [ 2 ]

0 голосов
/ 21 февраля 2020

Всегда лучше не вызывать функцию, написанную в сервисе, с html. Я думаю, что вы можете решить свою текущую проблему, изменив область обслуживания с частного на publi c. Но лучший способ - вызвать функцию внутри компонента из html и вызвать getAdmin () внутри сервиса из этой функции. Рекомендуется сохранять конфиденциальность области обслуживания при внедрении зависимостей.

app.component. html

<a class="nav-link" *ngIf="adminExists()" routerLink="/admin" routerLinkActive="active">Admin</a>

app.service.ts

import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Router } from '@angular/router';

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

 constructor(private http: HttpClient, private _router: Router) { }

getAdmin() {
    if (localStorage.getItem('admin') === 'true') return true;
    return false;
  }
}

app.component.ts

import { Component } from '@angular/core';
import { AuthService } from './auth.service';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  constructor(private _authService: AuthService) {
  }
  adminExists(){
         return _authService.getAdmin();
  }
}
0 голосов
/ 21 февраля 2020

Изменить частную сферу обслуживания на publi c в app.component.ts:

import { Component } from '@angular/core';
import { AuthService } from './auth.service';

@Component({
  selector: 'app-root',
  templateUrl: './app.component.html',
  styleUrls: ['./app.component.css']
})
export class AppComponent {
  constructor(public _authService: AuthService) {
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...