• 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ę

Object Storage Arubacloud
0 głosów
195 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 (270,190 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 (270,190 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 592 wizyt
pytanie zadane 3 kwietnia 2021 w HTML i CSS przez dawid2002 Mądrala (5,190 p.)
0 głosów
1 odpowiedź 190 wizyt
pytanie zadane 13 lutego 2020 w JavaScript przez Aisekai Nałogowiec (42,190 p.)
+1 głos
3 odpowiedzi 447 wizyt

92,579 zapytań

141,432 odpowiedzi

319,663 komentarzy

61,964 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...