Angular 2 - Открыть/закрыть загрузку по умолчанию

Я не хочу использовать angular2 -bootstrap или ng2-bs3-modal, как предложено в вопросах/ответах Angular 2 Bootstrap Modal и Angular 2.0 и Modal Диалог

Теперь. Я знаю, что открывает и закрывает загрузочный модальный.

  • Дисплей переключается между display: none; и display: block;
  • Атрибут переключается на div между aria-hidden="true" и aria-hidden="false

Итак, я, естественно, думал, что если я привяжу к атрибуту aria-hidden, например, [aria-hidden]="true", я мог бы манипулировать им. К сожалению, я не могу привязываться к aria-hidden, так как это не известное свойство div. (примечание, attr.aria-hidden не существует)

Я знаю, что это возможно с помощью JQuery с $('#myModal').modal(), как показано в этом вопросе Как открыть модальное окно Bootstrap с помощью jQuery?

Итак, мой вопрос: есть ли TypeScript функциональность, которая делает то же самое, что и modal() из JQuery, или есть способ привязать функцию/переменную к aria-hidden?

Мой текущий html:

<div id="createAccountModal" class="modal fade customForm" role="dialog" [aria-hidden]="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <h4>Create account</h4>
            </div>
            <div class="modal-body">
               <p>Lorem ipsum</P>
            </div>
            <div class="modal-footer align-left">
                My custom footer
            </div>
        </div>
    </div>
</div

Ответы

Ответ 1

Вы можете попробовать что-то вроде этого, создайте myModal.html:

<div class="modal-backdrop fade in" [style.display]="showModal ? 'block' : 'none'"></div>
  <div class="modal" tabindex="-1" role="dialog" style="display: block" [style.display]="showModal ? 'block' : 'none'">
     <div class="modal-dialog">
        <div class="modal-popup">
          <div class="popup-title">
            <span>{{title}} </span>
            <i class="icon-cancel fr" data-dismiss="modal" aria-label="Close" (click)="cancelAction()"></i>
            <p *ngIf="subTitle">{{subTitle}}</p>
          </div>
        <ng-content></ng-content>
      </div>
  </div>
</div>

затем создайте myModal.component.ts:

import { Component, Input, Output, EventEmitter, OnInit } from '@angular/core';

const template: string = require('./myModal.html');

@Component({
   selector: 'modal',
   template
})

export class Modal implements OnInit {
  @Input('show-modal') showModal: boolean;
  @Input('title') title: string;
  @Input('sub-title') subTitle: string;
  @Input('cancel-label') cancelLabel: string;
  @Input('positive-label') positiveLabel: string;

  @Output('closed') closeEmitter: EventEmitter < ModalResult > = new EventEmitter < ModalResult > ();
  @Output('loaded') loadedEmitter: EventEmitter < Modal > = new EventEmitter < Modal > ();
  @Output() positiveLabelAction = new EventEmitter();

  constructor() {}

  ngOnInit() {
    this.loadedEmitter.next(this);
  }

  show() {
    this.showModal = true;
  }

  hide() {
    this.showModal = false;
    this.closeEmitter.next({
      action: ModalAction.POSITIVE
    });
  }

  positiveAction() {
    this.positiveLabelAction.next(this);
    return false;
  }

  cancelAction() {
    this.showModal = false;
    this.closeEmitter.next({
      action: ModalAction.CANCEL
    });
    return false;
  }
}

export enum ModalAction { POSITIVE, CANCEL }

export interface ModalResult {
  action: ModalAction;
}

затем создайте модуль для этого, чтобы вы могли использовать его везде и использовать в любом месте:

<modal #deleteUserModal id="deleteUser"
   [show-modal]="isModalOpen"
   [title]="'Delete'"
   >
  <div class="popup-content">
    <p>Are you sure you want to delete the user permanently?</p>
  </div>
  <div class="popup-footer">
    <button class="btn cancel"  aria-label="Close" (click)="deleteUserModal.hide()">
        Cancel
    </button>
    <button type="button" class="btn btn-primary" (click)="deleteSelectedUser(deleteUserModal)" aria-label="Close">
        Delete
    </button>
   </div>
 </modal>

Вы также можете улучшить это:)

Ответ 2

если ваш модальный имеет кнопку отмены (иначе создайте скрытую кнопку закрытия). Вы можете имитировать событие клика на этой кнопке, чтобы ваша форма была закрыта. В вашем компоненте добавьте ViewChild

export class HelloComponent implements OnInit {

@ViewChild('fileInput') fileInput:ElementRef;

в вашей кнопке закрытия добавьте #fileInput

<button class="btn btn-danger" #fileInput id="delete-node" name="button" data-dismiss="modal" type="submit">Cancelar</button>

Если вы хотите закрыть модальный программный запуск события клика на кнопке закрытия

this.fileInput.nativeElement.click();

Чтобы открыть, вы можете использовать ту же идею

Ответ 3

Хорошо, оказывается, нет необходимости связываться с aria-hidden, хотя это должно быть возможно, я думаю.

Текущий ответ получен из Angular 2.0 и модального диалога (но ответ только с 9 upvotes)

Добавление

<div id="createAccountModal" class="modal fade customForm" role="dialog" [ngClass]="{'in': visibleAnimate}"
       [ngStyle]="{'display': visible ? 'block' : 'none', 'opacity': visibleAnimate ? 1 : 0}">

Это для моего кода и наличия обработчика (click) на кнопке, переключающей visible и visibleAnimate, подходит для моих потребностей.

Ответ 4

попробуйте использовать ng-window, это позволяет разработчику открывать и полностью управлять несколькими окнами в одностраничных приложениях простым способом, без Jquery, No Bootstrap.

введите описание изображения здесь

Avilable Configivity

  • Окно Maxmize
  • Свернуть окно
  • Нестандартный размер,
  • Пользовательская позиция
  • окно можно перетаскивать
  • Блокировать родительское окно или нет
  • Центрировать окно или нет
  • Передать значения для окна с закрытием
  • Передать значения из окна доступа к родительскому окну
  • Прослушивание окна закрывающего закрытия в родительском окне
  • Слушайте изменение размера события с помощью своего пользовательского прослушивателя
  • Открыть с максимальным размером или нет
  • Включение и отключение изменения размера окна
  • Включение и отключение максимизации
  • Включение и отключение минимизации