Angular 6 - http сообщение от bsmodal

Я работаю над своим первым угловым приложением и пытаюсь разместить объект продукта в своем API.

У меня есть компонент, который перечисляет все продукты на указанном API

import { Component, OnInit } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { ToastrService } from 'ngx-toastr';
import { BsModalRef, BsModalService } from 'ngx-bootstrap';
import { Produto } from '../../models';
import { ProductComponent } from '../../dialogs/product/product.component';

@Component({
  selector: 'app-products',
  templateUrl: './products.component.html',
  styleUrls: ['./products.component.scss']
})
export class ProductsComponent implements OnInit {
  produtos    : Array<Produto>;
  bsModalRef  : BsModalRef;
  loading     : boolean = false;

  constructor(
    private http: HttpClient,
    private toastr: ToastrService,
    private modalService: BsModalService
  ) {}

  ngOnInit() {
    this.getProducts();
  }

  getProducts() {
    this.loading = true;
    this.http.get<Produto[]>(`<apiurl>`)
    .subscribe(
      response => {
        this.produtos = response;
        this.loading = false;
      },
      err => {
        this.toastr.error(err.error.message, 'Erro');
        this.loading = false;
      }
    );
  }

  newProduct() {
    this.bsModalRef = this.modalService.show(ProductComponent, {class: 'modal-lg'});
  }



}

У этого компонента есть кнопка, которая открывает bsmodal для создания и публикации нового продукта - newProduct ()

Вот файлы html и ts для компонента, который обрабатывает это

<form (ngSubmit) = "create()" novalidate #f = "ngForm">
    <div class = "modal-header">
        <h4 class = "modal-title pull-left">Novo produto</h4>
        <button type = "button" class = "close pull-right" aria-label = "Close" (click) = "cancel()">
            <span aria-hidden = "true">&times;</span>
        </button>
    </div>
    <div class = "modal-body">
        <div class = "row">
          <div class = "col-md-6 col-sm-12">
              <div class = "form-group">
                  <label>Nome</label>
                  <input type = "text" name = "nome"  [(ngModel)] = "form.nome" class = "form-control" required>
                  <div class = "invalid-feedback">Este campo é obrigatório</div>
              </div>
          </div>
          <div class = "col-md-6 col-sm-12">
              <div class = "form-group">
                  <label>Preço</label>
                  <input type = "number" name = "preco"  [(ngModel)] = "form.preco" class = "form-control" required>
                  <div class = "invalid-feedback">Este campo é obrigatório</div>
              </div>
          </div>
          <div class = "col-md-6 col-sm-12">
              <div class = "form-group">
                  <label>Altura</label>
                  <input type = "number" name = "altura"  [(ngModel)] = "form.altura" class = "form-control" required>
                  <div class = "invalid-feedback">Este campo é obrigatório</div>
              </div>
          </div>
          <div class = "col-md-6 col-sm-12">
              <div class = "form-group">
                  <label>Largura</label>
                  <input type = "number" name = "largura"  [(ngModel)] = "form.largura" class = "form-control" required>
                  <div class = "invalid-feedback">Este campo é obrigatório</div>
              </div>
          </div>
          <div class = "col-md-6 col-sm-12">
              <div class = "form-group">
                  <label>Profundidade</label>
                  <input type = "number" name = "profundidade"  [(ngModel)] = "form.profundidade" class = "form-control" required>
                  <div class = "invalid-feedback">Este campo é obrigatório</div>
              </div>
          </div>
        </div>
    </div>
    <div class = "modal-footer">
        <button type = "submit" class = "btn btn-success" [disabled] = "f.invalid">
            <i class = "fa fa-save"></i> Guardar
        </button>
        <button type = "button" class = "btn btn-danger" (click) = "cancel()">
            <i class = "fa fa-times-circle"></i> Fechar
        </button>
    </div>
</form>




import { Component, OnInit } from '@angular/core';
import { BsModalRef } from 'ngx-bootstrap';
import { Produto } from '../../models/Produto';
import { HttpClient } from '@angular/common/http';
import { ToastrService } from 'ngx-toastr';

@Component({
  selector: 'app-modal-product',
  templateUrl: './product.component.html',
  styleUrls: ['./product.component.scss']
})
export class ProductComponent implements OnInit {

  form            : Partial<Produto> = {
    nome          : "",
    preco         : 0,
    altura        : 0,
    largura       : 0,
    profundidade  : 0
  }
  canceled : boolean = false;
  constructor(public bsModalRef: BsModalRef, private http: HttpClient, private toastr: ToastrService) { }

  ngOnInit() {
    this.canceled = false;
  }

  create() {
    this.http.post<Produto>(`<apiurl>`, this.form).subscribe(
      response => {
        this.toastr.success('Produto adicionado com sucesso.', 'Sucesso');
        this.bsModalRef.hide();
      },
      err => {
        this.handleError(err);
      }
    );


  }

  cancel() {
    this.canceled = true;
    this.bsModalRef.hide();
  }


  private handleError(err) {
    this.toastr.error(err.error.message, 'Erro');
  }
}

Однако, когда я нажимаю «Сохранить», ничего не происходит, и модальное окно просто зависает. Был бы признателен за любую помощь.

ты можешь сделать стекблиц? другим людям легче находить проблемы и проверять решения

ABOS 08.12.2018 23:29

Вы смотрели в консоли разработчика (F12), нет ли выводимых ошибок?

R. Richards 08.12.2018 23:33
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Angular и React для вашего проекта веб-разработки?
Angular и React для вашего проекта веб-разработки?
Когда дело доходит до веб-разработки, выбор правильного front-end фреймворка имеет решающее значение. Angular и React - два самых популярных...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
Мое недавнее углубление в Angular
Мое недавнее углубление в Angular
Недавно я провел некоторое время, изучая фреймворк Angular, и я хотел поделиться своим опытом со всеми вами. Как человек, который любит глубоко...
Освоение Observables и Subjects в Rxjs:
Освоение Observables и Subjects в Rxjs:
Давайте начнем с основ и постепенно перейдем к более продвинутым концепциям в RxJS в Angular
1
2
69
0

Другие вопросы по теме