Как создать геттер-сеттер в угловых - PullRequest
0 голосов
/ 14 февраля 2019

Я использую Angular 7. Я хочу получить и установить переменную в машинописи

Мой код login.service.ts

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

@Injectable({
  providedIn: 'root'
})
export class LoginService {
  public username:string;
  public token:string;
  public fullname:string;
  constructor() { }
  set setUser(val: string){
    this.username = val;
  }
  set setToken(val:string){
    this.token=val;
  }
  set setFullName(val:string){
    this.fullname=val;
  }
  get getUser():string{
    return this.username;
  }
  get getToken():string{
    return this.token;
  }
  get getFullName():string{
    return this.fullname;
  }
}

И мой код в Login.Component.ts

fLogin(user, pass) {
    this.users.setUser=user;
}

И мой код в Customer.Component.ts

import { Component, OnInit, ViewChild, ElementRef } from '@angular/core';
import { Http, Headers } from "@angular/http";
import {LoginService} from "../login.service"
import { NgLocalization } from '@angular/common';
@Component({
  selector: 'app-customers',
  templateUrl: './customers.component.html',
  styleUrls: ['./customers.component.css']
})
export class CustomersComponent implements OnInit {
  constructor(public user:LoginService) {

  }
  loadData() {
    console.log(this.user.getUser)
  }
    ngOnInit() {
    this.loadData();
  }
}

Я ожидаю установить значение в Login.Component.ts И получить значение в Customer.Component.ts

Как это работает или как это работает?

1 Ответ

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

1) Убедитесь, что ваш файл login.component.ts также внедряет службу.

constructor(public user:LoginService)

2) Убедитесь, что ни у одного модуля или компонента нет массива providers, содержащего вашу службу.

Если вы регистрируете сервис, используя providedIn: 'root', как у вас, и не регистрируйте сервис снова в любом массиве providers, то сервис должен быть одноэлементным и работать так, как вы ожидаете.

Кроме того, имена ваших геттеров и сеттеров неверны.Получатель и установщик должны иметь одно и то же имя 1014 *, так как они являются просто еще одним способом определения свойства:

  get user():string{
    return this.username;
  }
  set user(val: string){
    this.username = val;
  }
  get token():string{
    return this.token;
  }
  set token(val:string){
    this.token=val;
  }
  get fullName():string{
    return this.fullname;
  }
  set fullName(val:string){
    this.fullname=val;
  }

Затем вы получаете доступ к этим свойствам получения / установки так же, как и к любым другим объявленным свойствам..

 this.fullName = "Joe Smith"; // to set the value and call the setter

 console.log(this.fullName); // to reference the value.

В клиентском компоненте:

  constructor(public loginService:LoginService) {

  }
  loadData() {
    console.log(this.loginService.user)
  }

ПРИМЕЧАНИЕ. Я переименовал ваш параметр конструктора, чтобы лучше его идентифицировать.

В вашем логине:

  constructor(public loginService:LoginService) {

  }

  fLogin(user, pass) {
     this.loginService.user = user;
  }
...