Home  >  Q&A  >  body text

Title rewritten as: My div or its data is not rendering correctly with the ngFor directive

I created a service in my component that I subscribe to, but when I use ngFor, the div doesn't render at all.

Component.TS file

import { Component, OnInit } from '@angular/core';
import {FormBuilder, Validators} from '@angular/forms';
import { PlansService } from 'src/app/services/plans.service';


interface JobType {
  value: string;
  viewValue: string;
}

interface WorkEnv {
  value: string;
  viewValue: string;
}


@Component({
  selector: 'app-post-job',
  templateUrl: './post-job.component.html',
  styleUrls: ['./post-job.component.css']
})

export class PostJobComponent implements OnInit {

  jobTypes: JobType[] = [
    {value: 'type-0', viewValue: '全职'},
    {value: 'type-1', viewValue: '兼职'},
    {value: 'type-2', viewValue: '自由职业'},
 
  ];

  workEnvs: WorkEnv[] = [
    {value: 'type-0', viewValue: '远程'},
    {value: 'type-1', viewValue: '混合'},
    {value: 'type-2', viewValue: '现场'},
 
  ];

  jobForm = this.fb.group({ 

    jobTitle: this.fb.group({
      title: ['', [Validators.required, Validators.minLength(2), Validators.pattern('^[_A-z0-9]*((-|\s)*[_A-z0-9])*$')]],
      jobType: ['', [Validators.required]]
    }),

   })

   plans: any;
  
  constructor(private fb: FormBuilder, private service:PlansService) {
   }

  ngOnInit(): void {

    this.service.getPlans()
      .subscribe(response => {
        this.plans = response;
        console.log(response);
      });
    
  }



   // Getter method to access formcontrols
   get myForm() {
    return this.jobForm.controls;
  }

 
  // Submit Registration Form
  // onSubmit() {
  //   this.submitted = true;
  //   if(!this.jobForm.valid) {
  //     alert('Please fill all the required fields to create a super hero!')
      
  //   } else {
  //     console.log(this.jobForm.value)
  //   }
  // }

}

Component.html file

<div class="subscription-container" >
  <div class="card" *ngFor="let plan of plans " >
      <h1>{{plan.title}}</h1>
  </div>
</div>

The data shows up in my console.log but doesn't render at all on the card. Please help, thank you!

I tried adding a dummy array in the ts file and printing it to the console log, but it still doesn't render in the div.

P粉450744515P粉450744515408 days ago437

reply all(1)I'll reply

  • P粉785522400

    P粉7855224002023-09-07 13:32:57

    You can load your plan asynchronously.

    1. Create an observable object public plans$: Observable<any>

    2. Assign your subscription this.plans$ = this.service.getPlans();

    3. Conditionally Rendering in Your HTML

    <ng-container *ngIf="plans$ | async as plans">
     <div *ngFor="let plan of plans">
      {{ plan | json }} 
     </div>
    </ng-container>

    reply
    0
  • Cancelreply