Угловой 7. При использовании Observable страница обновляется без запроса - PullRequest
0 голосов
/ 09 марта 2019

Угловой 7. Я выполняю http-вызов из службы, созданной мной самостоятельно, после возвращения результата вызова страница обновляется автоматически. Я думаю, что это поведение может иметь какое-то отношение к наблюдаемой, но я не знаю, в чем проблема

First way to call to http:

deleteBrand(brand: Brand) {
     if (confirm("¿Estás seguro que deseas eliminar el registro?")) {
       return this.http.delete(`http://localhost:3000/api/brand/${brand._id}`)
      .subscribe(data => this.deleteElementFromBrands(brand))
     }
    }

    private deleteElementFromBrands(brand: Brand) {
      console.log(JSON.stringify(brand));
      var i = this.findIndex(this.brands, brand);
      this.brands.splice(i, 1);
    }
      
    private findIndex(array: any[], item: any): number {
      var i = 0;
      for (i; i < array.length; i++) {
        if (array[i]._id == item._id) {
          return i;
        }
      }
      return -1;
    }

Кроме того, если я использую этот другой код, происходит автоматическое обновление страницы, что нежелательно

Call that refreshes the page unwanted:

// --- listbrands.component.ts

  deleteBrand(brand: Brand) {
    if (confirm("¿Estás seguro que deseas eliminar el registro?")) {
      this.brandService.deleteBrand(brand._id)
      .subscribe(
        res => 
        this.deleteElementFromBrands(brand)
      );
    }
  }


//---- Y el servicio
//---- brandService.component.ts


deleteBrand (id: string): Observable<any> {
  return this.http.delete(`${this.domain}${this.brandUrl}/${id}`)
  .pipe(
    tap(_ => console.log(`deleted item id=${id}`))
  );
}
<div class="container">
  <div class="row">
      <div class="col-lg-3"></div>
      <div class="col-lg-6">  
  <h2>Lista de Marcas de Aeronaves</h2>
  <div class="table-responsive">
    <table class="table">
      <thead>
        <tr>
          <th scope="col"></th>
          <th scope="col">Marca</th>
        </tr>
      </thead>
      <tbody>
        <tr *ngFor="let brand of brands">
          <td>
            <a>
              <img
                src="../../../../assets/images/{{ brand._id }}.{{
                  brand.extension
                }}"
                alt="imagen"
                class="card-img-top "
              />
            </a>
          </td>
          <td>{{ brand.brand }}</td>
          <td>
            <div class="d-flex justify-content-end">
              <a [routerLink]="['/brand/edit', brand._id]"
                ><i class="fa fa-edit  fa-2x"></i
              ></a>
            </div>
          </td>
          <td>
            <div class="">
              <i
                class="fa fa-trash  fa-2x"
                (click)="this.deleteBrand(brand)"
                style="cursor: pointer; color: tomato;"
              ></i>
            </div>
          </td>
        </tr>
      </tbody>
    </table>
  </div>
  <div>
    <form class="link right-space">
      <input
        type="submit"
        value="Nuevo"
        class="btn btn-primary"
        routerLink="/brands/new"
      />
    </form>
  </div>
  <div class="col-lg-3"></div>
  </div>

</div>

А вот и код бэкэнда

function deleteBrand(req, res) {
  let brandId = req.params.brandId;
  Brand.findById(brandId, (err, brand) => {
    if (err)
      return res.status(500).send({ message: `Error en la petición: ${err}` });
    if (!brand)
      return res.status(404).send({ message: `No se encuentra en la BD` });

    brand.remove(err => {
        if (err)
            throw err;
        else{
            console.log(`Elemento borrado: ${brand}`);                   

            // Borramos el archivo de imagen de la carpeta public
            let oldFile = brandId + "." + brand.extension;
            fs.unlink("./frontend/src/assets/images/" + oldFile, err => {
                if (err)
                    throw err;
                else{
                    console.log(`Imagen borrada`);
                }
            });
            
            res.send({ message: `Elemento borrado: ${brand}`, brand });
        }
    });
  });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...