• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Angular - Boostrap modal nie pokazuje się

Mały hosting, OGROMNE możliwości
0 głosów
564 wizyt
pytanie zadane 8 czerwca 2023 w HTML i CSS przez TheDarkSide Użytkownik (930 p.)
edycja 8 czerwca 2023 przez TheDarkSide

Mam boostrap model jako oddzielny komponent żeby można było z różnych komponentów go włączać. Myślę że problem jest z <app-modal>. Po naciśnięciu guzika model się włącza ale jest sam pasek i nie pokazuje formularza . Brak errorow w konsoli. Kod jest tu :

Kod HTML modalu:

<ng-template #addJokeModal>
    <div class="modal-content my-custom-modal">
        <div class="modal-header">
            <h4 class="modal-title pull-left">Dodawanie żartu</h4>
            <button type="button" class="btn-close close pull-right" aria-label="Close" (click)="modalRef?.hide()">
                <span aria-hidden="true" class="visually-hidden">&times;</span>
            </button>
        </div>
        <div class="modal-body">
            <div class="adding-joke" *ngIf="!isloading">
                <form method="POST" [formGroup]="addJokeForm" (ngSubmit)="addJoke()">
                    <div class="joke-category">
                        <select name="group" class="custom-select" formControlName="category">
                            <option value="" disabled selected hidden>Wybierz kategorię</option>
                            <option *ngFor="let category of categories">{{ category.name }}</option>
                        </select>
                    </div>
                    <div class="joke-content">
                        <input placeholder="Wprowadź treść" type="text" class="form-control" formControlName="content">
                    </div>
                    <div class="cancel-joke">
                        <button class="cancel-button" (click)="cancelJoke()">Anuluj</button>
                    </div>
                    <div class="add-joke">
                        <button class="add-button" id="add_joke_button">
                            Dodaj
                        </button>
                    </div>
                </form>
            </div>
        </div>
    </div>
</ng-template>

i typescript: 

import { Component, OnInit, TemplateRef, VERSION } from '@angular/core';
import { PagesService } from '../pages.service';
import { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';
import { FormBuilder, FormGroup, Validators } from '@angular/forms';
import { Router } from '@angular/router';

@Component({
  selector: 'app-add-joke-modal',
  templateUrl: './add-joke-modal.component.html',
  styleUrls: ['./add-joke-modal.component.css']
})
export class AddJokeModalComponent {

  public jokes: any = [];
  isLoading = true
  modalRef?: BsModalRef;
  public categories: any = [];
  public isloading = true;
  addJokeForm!: FormGroup;
  get addJokeF() { return this.addJokeForm.controls; }
  constructor(
    private PagesService: PagesService,
    private modalService: BsModalService,
    private formBuilder: FormBuilder,
    private router: Router,
  ) { }

  ngOnInit(): void {
    this.addJokeForm = this.formBuilder.group({
      category: ['', Validators.required],
      content: ['', Validators.required],
    });
    this.isloading = false;
    this.loadCategories();
  }

openModal(template: TemplateRef<any>) {
    this.modalRef = this.modalService.show(template);
  }
  addJoke() {
    if (this.addJokeForm.invalid) {
      return;
    } else {
      const json_data = {
        category: this.addJokeF['category'].value,
        content: this.addJokeF['content'].value,
      }
      this.PagesService.AddJoke(json_data).subscribe(response => {
        {
          this.router.navigate(['../home']);
        }
      })
    }
  }
  loadCategories() {
    this.PagesService.LoadCategories().subscribe(response => {
      this.categories = response
      console.log(response)
    })
  }
  cancelJoke() {
    this.modalRef?.hide();
}

}


A tu jest drugi komponent w którym ten moduł powinien być wyświetlany: 

<button class="add" (click)="openModal(addJokeModal)">Dodaj</button>

<ng-template #addJokeModal>
  <app-add-joke-modal></app-add-joke-modal>
</ng-template>

<div class="jokes">
  <div class="col-lg-6 col-sm-12 joke" *ngFor="let joke of jokes">
    <div class="category">
      {{joke.category}}
    </div>
    <div class="conent">
      {{joke.content}}
    </div>
    <button class="delete" (click)="deleteJoke(joke.id)">Usuń</button>
  </div>
</div>

i typescript: 

import { Component } from '@angular/core';
import { PagesService } from '../pages.service';
import { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';
import { AddJokeModalComponent } from '../add-joke-modal/add-joke-modal.component';
import { Router } from '@angular/router';

@Component({
  selector: 'app-all-jokes',
  templateUrl: './all-jokes.component.html',
  styleUrls: ['./all-jokes.component.css']
})
export class AllJokesComponent {

  public jokes: any = [];
  modalRef?: BsModalRef;

  constructor(
    private PagesService: PagesService,
    private modalService: BsModalService,
    private router: Router,
  ) { }

  ngOnInit(): void {
    this.loadData();
  }

  loadData() {
    this.PagesService.LoadJokes().subscribe(response => {
      console.log(response)
      this.jokes = response;
    });
  }

  deleteJoke(jokeId: number) {
    this.PagesService.DeleteJoke(jokeId).subscribe(response => {
      // Po usunięciu żartu z bazy danych wykonaj odpowiednie działania (np. odświeżenie listy żartów)
      this.loadData();
    });
  }
  openModal(template: any) {
    this.modalRef = this.modalService.show(template);
  }
}

w module.ts mam w deklaracjach ten komponent.

Może ktoś mógłby pomóc.

komentarz 8 czerwca 2023 przez Wiciorny Ekspert (283,260 p.)
Wklej kod w odpowiednie bloczki tutaj na forum.
komentarz 8 czerwca 2023 przez TheDarkSide Użytkownik (930 p.)
Done

2 odpowiedzi

0 głosów
odpowiedź 8 czerwca 2023 przez Wiciorny Ekspert (283,260 p.)

Jesteś pewny, że warunek który na wnętrze okna modalnego postawiłeś jest spełniony? 
 

<div class="adding-joke" *ngIf="!isloading">

bo mam wrażenie, że w momencie wywołania otworzenia okna modalnego zmianna isloading wcale nie jest false. 

komentarz 8 czerwca 2023 przez TheDarkSide Użytkownik (930 p.)
Dobra czaje , podczas inicjowania jest true wiec się nie wyświetla, ale pousuwałam to isLoading pokombinowałam a to się dalej nie wyświetla. Konretnie moduł się otwiera ale brak jest zawartości a w konsoli są wyprntowane normalnie kategorie i elementy formularza.
0 głosów
odpowiedź 9 czerwca 2023 przez TheDarkSide Użytkownik (930 p.)
Update: Ogólnie cały kod jak wpisałam w jeden komponent działa normalnie, wszystko się otwiera więc, podejrzewam , że chodzi o routing/hierarchię coś w ten deseń. Moze ktoś ma jakis pomysł.

Podobne pytania

0 głosów
2 odpowiedzi 1,265 wizyt
pytanie zadane 3 kwietnia 2021 w HTML i CSS przez dawid2002 Mądrala (5,190 p.)
0 głosów
1 odpowiedź 385 wizyt
pytanie zadane 13 lutego 2020 w JavaScript przez Aisekai Nałogowiec (42,190 p.)
+1 głos
3 odpowiedzi 883 wizyt

93,718 zapytań

142,630 odpowiedzi

323,262 komentarzy

63,265 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...