Форма, управляемая угловым шаблоном, не отображает значения по умолчанию

#angular #forms #frontend

Вопрос:

У меня есть форма, управляемая шаблоном, и некоторые значения по умолчанию, инициализированные для — selectedHotel, nrooms (количество комнат), ndays (количество дней). Когда я запускаю этот код после удаления тега формы, значения по умолчанию отображаются, как и ожидалось, но когда я добавил тег формы, выпадающий список, дни, номера и т. Д. Все оказываются пустыми

 <form #myform="ngForm">
  
    <div class="sec3">
      <h3>Name</h3>
      <select (change)="onSelect($any($event.target).value)">
          <option *ngFor="let hotel of hotels" [value]="hotel.name">
          {{hotel.name}}
        </option>
      </select> 
      <p>Address:</p> 
      <p>{{selectedHotel.addr}}</p>
    </div>

    
    <div class="sec4">
        <h3>Rooms</h3>
        <input type="number" [class.is-invalid]="rooms.invalid" [(ngModel)]="nrooms" #rooms="ngModel" required>
        <br><small *ngIf="rooms.invalid amp;amp; rooms.touched">Please enter valid number of rooms</small>
        <p>Available:</p>
        <p>{{selectedHotel.rooms}}</p>
    </div>

    <div class="sec5">
      <h3>Days</h3>
      <input type="text" #days="ngModel" [(ngModel)]="ndays" [class.is-invalid]="days.invalid" required>
      <p>Room Price:</p>
      <p>{{selectedHotel.rmprice|currency:'INR'}}</p>
    </div>

    <div class="sec6">
        <h3>Total: </h3>
        <h3> {{nrooms*ndays*selectedHotel.rmprice|currency:'INR'}}</h3>
        <button class="btn" (click)="onBook()">Book</button>
    </div>
  </form>
 

Это соответствующий файл ts

 import { Component, OnInit } from '@angular/core';
import{Booking} from 'src/app/models/booking';
import {Hotel} from 'src/app/models/hotel';
@Component({
  selector: 'app-hotel',
  templateUrl: './hotel.component.html',
  styleUrls: ['./hotel.component.css']
})
export class HotelComponent implements OnInit {

  hotels:Hotel[]=[
    {name:'Express Inn',addr:'Prashant Nagar, Pathardi Phata, Nashik',rmprice:1000,rooms:100},
    {name:'Emerald Park',addr:'Holaram Colony, Sharanpur, Nashik',rmprice:2000,rooms:50}

  ]

  bookings:Booking[]=[];

  display;

  selectedHotel:Hotel;
  nrooms:number;
  ndays:number;
  id_cnt;

  constructor() {
    this.nrooms=1;
    this.ndays=1;
    this.display=true;
    this.id_cnt=0;
    this.selectedHotel=this.hotels[0];
  }

  ngOnInit(): void {
  }


  onSelect(name:string)
  {
    for (var i = 0; i < this.hotels.length; i  ) {
      if (this.hotels[i].name == name) {
        this.selectedHotel = this.hotels[i];
      }

    }
  }


  onBook()
  {
    for (var i = 0; i < this.hotels.length; i  ) {
      if (this.hotels[i].name == this.selectedHotel.name) {
         this.selectedHotel.rooms-=this.nrooms;
      }

    }

    this.id_cnt  ;

    this.bookings.push(
      
        {
          id:this.id_cnt,
          name:this.selectedHotel.name,
          price:this.nrooms*this.ndays*this.selectedHotel.rmprice
        }
      
    )

    this.nrooms=0;
    this.ndays=0;

    
    
  }

  toggleDisplay()
  {
    this.display=!this.display;
  }




}