Как найти значение ключа получить от объекта? - PullRequest
1 голос
/ 25 апреля 2019

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

ошибка: ОШИБКА TypeError: Невозможно прочитать свойство 'userAccess' из неопределенного в ShowBranchuserComponent.push../src/app/pages/userrelated-page/show-branchuser/show-branchuser.component.ts.ShowBranchuserComponent.ngOnInit (show-branchuser.component.ts: 42)

import { Component, OnInit } from '@angular/core';
import { ActivatedRoute, Router } from '@angular/router';
import { UserrelatedService } from '../userrelated-page.service';
import { UserRegister } from 'app/shared/model/Register';
import { FormGroup, FormControl, FormBuilder, Validators } from '@angular/forms';
import { RouteInfo } from 'app/shared/sidebar/sidebar.metadata';
import {map} from 'rxjs/operators';


@Component({
  selector: 'app-show-branchuser',
  templateUrl: './show-branchuser.component.html',
  styleUrls: ['./show-branchuser.component.scss']
})
export class ShowBranchuserComponent implements OnInit {
  showuser: UserRegister;
  pname;
  regularForm: FormGroup;
  access:RouteInfo[];

  constructor(private _AR:ActivatedRoute, 
    private _router: Router, 
    private _userRelated: UserrelatedService,
    private _fb: FormBuilder) { 
    this._AR.params.subscribe(data=>{this.pname = data['id']})
  }

  ngOnInit() {
    this._userRelated.getOneUser(this.pname).subscribe(data=> this.showuser = data);
    this.regularForm = this._fb.group({
      'id': [{value:'', disabled: true}, Validators.required],
      'name':[{value:'', disabled: true}, Validators.required],
      'username':[{value:'', disabled: true}, Validators.required],
      'role':[{value:'', disabled: true}, Validators.required],
      'status':[{value:'', disabled: true}, Validators.required],
      'state':[{value:'', disabled: true}, Validators.required],
      'pincode':[{value:'', disabled: true}, Validators.required],
      'mobileno':[{value:'', disabled: true}, Validators.required],
      'address':[{value:'', disabled: true}, Validators.required],
    });
   this.access = this.showuser.userAccess; // here showing error 
    console.log(this.showuser);
  }

  onReactiveFormSubmit(){

  }
}

Ответы [ 2 ]

4 голосов
/ 25 апреля 2019

Возвращение наблюдаемого значения является асинхронной операцией.Из-за этого блок кода, который вы написали, потерпит неудачу, так как showuser будет неопределенным в этой точке.Чтобы лучше это понять, вы должны прочитать в очереди JavaScript и цикл обработки событий .

. Вместо этого вы должны назначить showuser.userAccess свойству access в блоке .subscribe():

ngOnInit() {
    this._userRelated.getOneUser(this.pname).subscribe(data=> {
      this.showuser = data;
      this.access = this.showuser.userAccess; 
      console.log(this.showuser);
     ]);
    this.regularForm = this._fb.group({
      'id': [{value:'', disabled: true}, Validators.required],
      'name':[{value:'', disabled: true}, Validators.required],
      'username':[{value:'', disabled: true}, Validators.required],
      'role':[{value:'', disabled: true}, Validators.required],
      'status':[{value:'', disabled: true}, Validators.required],
      'state':[{value:'', disabled: true}, Validators.required],
      'pincode':[{value:'', disabled: true}, Validators.required],
      'mobileno':[{value:'', disabled: true}, Validators.required],
      'address':[{value:'', disabled: true}, Validators.required],
    });

  }
1 голос
/ 25 апреля 2019

Вы вставляете данные в this.showuser в функции подписки, так что это асинхронная операция, но вы пытаетесь использовать данные в операции синхронизации. Асинхронные операции требуют времени для возвращения данных с сервера клиенту, поэтому вы пытаетесь вставить данные в this.acess до их поступления.

Для решения этой проблемы вы можете вставить данные в this.acess внутри функции подписки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...