首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >对象中未定义的值

对象中未定义的值
EN

Stack Overflow用户
提问于 2019-03-20 03:11:23
回答 1查看 84关注 0票数 0

我想用来自服务器的数据填充一个页面,并能够更改信息,为此,我使用formbuilder将来自服务器的数据作为默认值,使用以下代码:

代码语言:javascript
复制
 createForm(){
    this.getGeral()
    this.getTiposTarefas()
    this.formulario = this.fb.group({
      'tipo_tarefa':[this.tarefa.tipoTarefa.id, Validators.compose([Validators.required])], // Cant set default values cuz the array is object is undefined
      'data_tarefa': [this.tarefa.data_tarefa, Validators.compose([Validators.required])],// Cant set default values cuz the array is object is undefined
      'inicio_tarefa': [this.tarefa.inicio, Validators.compose([Validators.required])],// Cant set default values cuz the array is object is undefined
      'fim_tarefa': [this.tarefa.fim, Validators.compose([Validators.required])]// Cant set default values cuz the array is object is undefined
   });
  }

但我觉得它是不确定的。我在de subscribe函数内部尝试了console.log(),对象'Tarefa‘被填充了,但在函数作用域之外却没有。

代码语言:javascript
复制
    import { Component, OnInit } from '@angular/core';
    import { NavParams, ModalController } from '@ionic/angular';
    import { TarefadetalheService } from './tarefadetalhe.service';
    import { Tarefa } from '../../models/tarefa.model';
    import { TipoTarefa } from '../../models/tipotarefa.model';

    import { FormGroup, FormBuilder, Validators } from '@angular/forms';
    @Component({
      selector: 'app-tarefas-detalhe',
      templateUrl: './tarefas-detalhe.page.html',
      styleUrls: ['./tarefas-detalhe.page.scss'],
    })
    export class TarefasDetalhePage implements OnInit {
     idTarefa = null
     tarefa: Tarefa
     tiposTarefas : TipoTarefa[]
     formulario: FormGroup
      constructor(
        private navParams: NavParams,
        private getTarefaDetalhe: TarefadetalheService,
        private modalController:ModalController,
        public fb: FormBuilder) {   }

      ngOnInit() {

        this.createForm()
      }

      getGeral(){
        this.idTarefa = this.navParams.get('id_tarefa');
        this.getTarefaDetalhe.recuperaDetalhes().subscribe((data: Tarefa)=>{ //passar o id da tarefa como parametro no recupera detalhes
        this.tarefa = data
       })
      }

  getTiposTarefas(){
    this.getTarefaDetalhe.recuperaTiposTarefas().subscribe((data: TipoTarefa[])=>{
    this.tiposTarefas = data
    console.log(this.tiposTarefas) // here it has information
    })
    console.log(this.tiposTarefas) // here it has not information
  }

  createForm(){
    this.getGeral()
    this.getTiposTarefas()
    this.formulario = this.fb.group({
      'tipo_tarefa':[this.tarefa.tipoTarefa.id, Validators.compose([Validators.required])], // Cant set default values cuz the array is object is undefined
      'data_tarefa': [this.tarefa.data_tarefa, Validators.compose([Validators.required])],// Cant set default values cuz the array is object is undefined
      'inicio_tarefa': [this.tarefa.inicio, Validators.compose([Validators.required])],// Cant set default values cuz the array is object is undefined
      'fim_tarefa': [this.tarefa.fim, Validators.compose([Validators.required])]// Cant set default values cuz the array is object is undefined
   });
  }
 closeModal()
 {
   this.modalController.dismiss();
 }
}

当我运行Ionic serve时,它抛出了下面的错误,并且我无法在Ionic控件上设置默认值:

我的HTML:

代码语言:javascript
复制
<ion-content padding *ngIf="tarefa != null">
  <form [formGroup]="formulario">
    <h4>
      <ion-icon name="list-box"></ion-icon> Geral
    </h4>
    <ion-grid>
      <ion-row>
        <ion-col size="8">
            <ion-label position="floating">Tipo de Tarefa</ion-label>
          <ion-select [formControlName]="tipo_tarefa" okText="Confirmar" cancelText="Cancelar">
            <ion-select-option *ngFor="let tipo of tiposTarefas" [value]="tipo.id">{{tipo.descricao}}</ion-select-option>
          </ion-select>
        </ion-col>
      </ion-row>
    </ion-grid>
    <h4>
      <ion-icon name="calendar"></ion-icon> Horário
    </h4>
    <ion-item-divider></ion-item-divider>
    <ion-grid>
      <ion-row>
        <ion-col size="5">
          <ion-label position="stacked">Data</ion-label>
          <ion-datetime  [formControlName]="data_tarefa" display-format="DD-MM-YYYY" max="2050-10-31" picker-format="DD-MM-YYYY"></ion-datetime>
        </ion-col>
        <ion-col size="3">
          <ion-label position="stacked">Inicio</ion-label>
          <ion-datetime  [formControlName]="inicio_tarefa" display-format="HH:mm" picker-format="HH:mm" ></ion-datetime>
        </ion-col>
        <ion-col size="3">
          <ion-label position="stacked">Fim</ion-label>
          <ion-datetime  [formControlName]="fim_tarefa" display-format="HH:mm" picker-format="HH:mm"></ion-datetime>
        </ion-col>
      </ion-row>
    </ion-grid>
    <h4>
      <ion-icon name="person"></ion-icon> Cliente
    </h4>
    <ion-item-divider></ion-item-divider>
    <ion-grid>
      <ion-row>
      </ion-row>
    </ion-grid>
  </form>
</ion-content>
EN

回答 1

Stack Overflow用户

发布于 2019-03-20 03:26:59

删除函数getTiposTarefas(),然后进行以下更改。

代码语言:javascript
复制
createForm(){
 this.getGeral();
 this.getTarefaDetalhe.recuperaTiposTarefas().subscribe((data: TipoTarefa[])=>{
 this.tiposTarefas = data;
 this.formulario = this.fb.group({...put the fields...});
  console.log(this.tiposTarefas) // here it has information
 })
}

更新:您需要先初始化此tarefa: Tarefa对象。见下文

代码语言:javascript
复制
tarefa: Tarefa =  {
  comentarios: '',
  data_tarefa: '',
  descricao: '',
  fim: '',
  id_aprovador: '',
  id_cliente: '',
  id_criador: '',
  id_sala: '',
  id_sistema: '',
  id_solicitante: '',
  inicio: '',
  nome_aprovador: '',
  nome_cliente: '',
  nome_criador: '',
  nome_sistema: '',
  nome_solicitante: '',
  numero: 0,
  participante: [],
  status_tarefa: 0,
  tarefa: '',
  tipoTarefa: {
      id:'',
      interna: null,
      descricao: ''
  }
};

那么它应该工作得很好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55248445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档