3
respostas

Escopo da arrow function

Pessoal, minha propriedade não está sendo preenchida com os dados que eu atribuo na arrow function

constructor(private employeeService: EmployeesService,
        private formBuilder : FormBuilder){
            this.employeeService
            .listEmployees()
            .subscribe(employees => {
                this.funcionarios = employees;                    
                console.log(this.funcionarios);
            });

    }

No console log acima, eu consigo imprimir funcionarios. Mas se eu fizer o mesmo console log em outro método do componente, o retorno é um array vazio. Alguém sabe o que acontece?

3 respostas

Cara eu não entendi muito bem, mais logo ja de cara, tira do contrutor e bota em um metodo OnInit() 'Implementacao'

Essa é minha classe:

import { Component } from "@angular/core";
import { FormBuilder, FormGroup , Validators} from '@angular/forms'; 

import { Employee } from "src/app/ab-front/employee.interface";
import { HttpClient } from "@angular/common/http";
import { EmployeesService } from "src/app/ab-front/employees/employees.service";
import { OnInit } from "@angular/core";
import { FormControl } from "@angular/forms";
import { Input } from "@angular/core";

@Component({
    selector: 'ab-employee',
    templateUrl: 'employee.component.html',
    styleUrls: ['employee.component.css']

})

export class EmployeeComponent implements OnInit { 


    formulario : FormGroup;

    funcionarios: Employee [] = [];

    @Input()
    pieChartData =  {
        chartType: 'PieChart',
        options: {'title': 'Dados do Pessoal',
                pieHole:0.4,
                chartArea: {
                    left:100,
                    top:50,
                    width: 400,
                    height: 300}

        },
        dataTable: this.populaChart()
    };

    populaChart(){
        let titulo : string [] = ['Nome','Participacao'];
        let linha = [];
        for(let i = 0 ; i < this.funcionarios.length ; i++){
            linha [i] = [this.funcionarios[i].nome + ' ' + this.funcionarios[i].sobrenome , 
            this.funcionarios[i].participacao];
            if(i < this.funcionarios.length){
                linha [i] = linha [i] + ',';
            }
        }
        console.log(this.funcionarios);
        return [
            titulo,
            ['Hugo Silva',  20],
            ['Eliza Souza', 20],
            ['Anderson Santos', 40]
        ];
    }

    constructor(private employeeService: EmployeesService,
        private formBuilder : FormBuilder){ }

        ngOnInit(){
            this.formulario = this.formBuilder.group({
                nome: ['', 
                    [
                        Validators.required,
                        Validators.pattern('([A-Z])([a-z])+'),
                        Validators.minLength(2)
                    ],
                ],
                sobrenome: ['', 
                    [
                        Validators.required,
                        Validators.pattern('([A-Z])([a-z])+'),
                        Validators.minLength(2)
                    ]
                ],
                participacao: ['', 
                    [
                        Validators.required,
                        Validators.pattern('[0-9]+'),
                        Validators.minLength(1)
                    ]
                ]
            });
                this.employeeService
                .listEmployees()
                .subscribe(employees => {
                    this.funcionarios = employees;                    
                    console.log(this.funcionarios);
                });    
        }
}

Nela eu tenho a propriedade funcionarios. Quero popular ela com o que vem do Backend. No OnInit, eu consigo dar print:

console.log(this.funcionarios);

Mas onde eu tento popular com essa informação, para gerar um PieChart do google(método populaChart), essa informação é um array vazio.

É esse meu "causo"