How to use code to open a modal in Angular 2?

前端 未结 14 3036
天涯浪人
天涯浪人 2020-12-05 04:34

Usually we use data-target=\"#myModal\" in the

14条回答
  •  陌清茗
    陌清茗 (楼主)
    2020-12-05 04:57

    Here is my full implementation of modal bootstrap angular2 component:

    I assume that in your main index.html file (with and tags) at the bottom of tag you have:

      
      
    

    modal.component.ts:

    import { Component, Input, Output, ElementRef, EventEmitter, AfterViewInit } from '@angular/core';
    
    declare var $: any;// this is very importnant (to work this line: this.modalEl.modal('show')) - don't do this (becouse this owerride jQuery which was changed by bootstrap, included in main html-body template): let $ = require('../../../../../node_modules/jquery/dist/jquery.min.js');
    
    @Component({
      selector: 'modal',
      templateUrl: './modal.html',
    })
    export class Modal implements AfterViewInit {
    
        @Input() title:string;
        @Input() showClose:boolean = true;
        @Output() onClose: EventEmitter = new EventEmitter();
    
        modalEl = null;
        id: string = uniqueId('modal_');
    
        constructor(private _rootNode: ElementRef) {}
    
        open() {
            this.modalEl.modal('show');
        }
    
        close() {
            this.modalEl.modal('hide');
        }
    
        closeInternal() { // close modal when click on times button in up-right corner
            this.onClose.next(null); // emit event
            this.close();
        }
    
        ngAfterViewInit() {
            this.modalEl = $(this._rootNode.nativeElement).find('div.modal');
        }
    
        has(selector) {
            return $(this._rootNode.nativeElement).find(selector).length;
        }
    }
    
    let modal_id: number = 0;
    export function uniqueId(prefix: string): string {
        return prefix + ++modal_id;
    }
    

    modal.html:

    
    

    And example of usage in client Editor component: client-edit-component.ts:

    import { Component } from '@angular/core';
    import { ClientService } from './client.service';
    import { Modal } from '../common';
    
    @Component({
      selector: 'client-edit',
      directives: [ Modal ],
      templateUrl: './client-edit.html',
      providers: [ ClientService ]
    })
    export class ClientEdit {
    
        _modal = null;
    
        constructor(private _ClientService: ClientService) {}
    
        bindModal(modal) {this._modal=modal;}
    
        open(client) {
            this._modal.open();
            console.log({client});
        }
    
        close() {
            this._modal.close();
        }
    
    }
    

    client-edit.html:

    {{ bindModal(editModal) }}
        Som non-standart title
        Some contents
        
    
    

    Ofcourse title, showClose, mhead and mfoot ar optional parameters.

提交回复
热议问题