简体   繁体   English

ng-bootstrap 模式未显示

[英]ng-bootstrap modal is not displaying

Am using ng-bootstrap modal in my application to show dialogue box.我在我的应用程序中使用 ng-bootstrap 模式来显示对话框。 but while clicking the button, nothing is happening, the modal is not displaying.但是在单击按钮时,什么也没有发生,模态没有显示。 while debugging it could find that the action is getting called, but the modal is not showing.在调试时,它可能会发现正在调用该操作,但未显示模态。

this is my app.module.ts这是我的 app.module.ts

 import {NgModule } from '@angular/core'; import {BrowserModule } from '@angular/platform-browser'; import {TaskService} from '../app/task/task.service'; import {TaskComponent} from '../app/task/task.component'; import {AppComponent } from './app.component'; import {FormsModule ,ReactiveFormsModule} from '@angular/forms'; import {HttpModule } from '@angular/http'; import {RouterModule, Routes,Route } from '@angular/router'; import {AddNewTaskComponent} from './task/addtask.component'; import {EventComponent} from '../app/controller/event.component' import {EventService} from '../app/service/event.service' import {AddNewEventComponent} from '../app/controller/addevent.component' import {AddEventService} from '../app/service/addevent.service' import {WeatherComponent} from '../app/controller/weather.component' import {LoginComponent} from '../app/controller/login.component' import {RegisterComponent} from '../app/controller/register.component' import {DashBoardcomponent} from '../app/controller/dashboard.component' import {FeatureComponent,StoryComponents} from '../app/controller/feature.component' import {AddTaskService} from '../app/task/addtask.service' import {FeatureServices } from '../app/service/feature.services' import {FileUploadComponents } from '../app/controller/fileUpload.component' import {AngularFireModule } from 'angularfire2' import {NgbModule } from '@ng-bootstrap/ng-bootstrap' //index routing , redirect to login for the blank request const indexRoutes:Route = { path:'',component:LoginComponent } // for all invalid routers , it will redirect to login component const fallbackRoutes = { path:'**',component:LoginComponent } // order is important, routes get called on the order which they defined const routes: Routes = [ indexRoutes, { path: 'register', component: RegisterComponent }, { path: 'dash', component: DashBoardcomponent, children: [ { // shows feature as default path: '', redirectTo: 'feature', pathMatch: 'full' }, { path: 'events', component: EventComponent, children:[ { path: 'addevent', component: AddNewEventComponent } ] }, { path: 'task', component: TaskComponent, children:[ { path: 'addtask', component: AddNewTaskComponent } ] }, { path: 'weather', component: WeatherComponent }, { path: 'feature', component: FeatureComponent, }, { path: 'uploads', component: FileUploadComponents, } ] } ]; export const routing = RouterModule.forRoot(routes); }; @NgModule({ imports: [ BrowserModule , FormsModule, ReactiveFormsModule, HttpModule, routing, AngularFireModule.initializeApp(firebaseConfig), NgbModule.forRoot() ], providers: [TaskService,EventService,AddEventService,AddTaskService,FeatureServices], declarations: [ AppComponent, LoginComponent, TaskComponent, AddNewTaskComponent, EventComponent, AddNewEventComponent, WeatherComponent, RegisterComponent, DashBoardcomponent, FeatureComponent, FileUploadComponents, StoryComponents ], entryComponents: [StoryComponents], bootstrap: [ AppComponent ], }) export class AppModule { }

this is my FeatureComponent class这是我的 FeatureComponent 类

 import { Component, ViewChild,Input } from '@angular/core'; import { ModalComponent } from 'ng2-bs3-modal/ng2-bs3-modal'; import {FeatureServices} from '../service/feature.services' import {ComponentAction} from '../base/Component.action' import {Features} from '../model/feature' import { NgForm } from '@angular/forms'; import {NgbModal, NgbActiveModal} from '@ng-bootstrap/ng-bootstrap'; @Component({ selector: 'addstories', template: ` <div class="modal-header"> <h4 class="modal-title">Hi there!</h4> <button type="button" class="close" aria-label="Close" (click)="activeModal.dismiss('Cross click')"> <span aria-hidden="true">&times;</span> </button> </div> <div class="modal-body"> <p>Hello, {{name}}!</p> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" (click)="activeModal.close('Close click')">Close</button> </div> ` }) export class StoryComponents { @Input() name; constructor(public activeModal: NgbActiveModal) {} } @Component({ moduleId:module.id, selector:'feature', template:` <link rel="stylesheet" href="../../bower_components/bootstrap/dist/css/bootstrap.min.css"> <div> <button class="btn btn-primary" (click)="listFeature()">All Features</button> <button class="btn btn-primary" (click)="showAddFeature()" >Add Features</button> </div> {{enableAddFeature}} <!-- loads child component list task and add new task --> <router-outlet></router-outlet> <form *ngIf="mode == 'insert' || mode == 'update' " #featureForm="ngForm" (ngSubmit)="processFeature(featureForm)"> <div class="form-group"> <label for="title">Feature Title</label> <input type="text" class="form-control" id="title" name="title" placeholder="Enter Feature Title" [(ngModel)]=selectedFeature.title> </div> <div class="form-group"> <label for="descr">Feature Title</label> <input type="text" class="form-control" id="descr" name="descr" placeholder="Enter Feature Description" [(ngModel)]=selectedFeature.descr> </div> <div class="form-group"> <label for="area">Feature Title</label> <input type="text" class="form-control" id="area" name="area" placeholder="Enter Feature Area" [(ngModel)]=selectedFeature.area> </div> <button type="submit" class="btn btn-primary">Submit</button> </form> <br/> <div class="container"> <div class="row"> <div class=""> <table class="table table-hover table-responsive table-bordered"> <thead> <tr> <th class="col-md-2">Title</th> <th class="col-md-2">Descr</th> <th class="col-md-1">Area</th> <th class="col-md-1">User Stories</th> <th class="col-md-1"></th> </tr> </thead> <tbody> <tr *ngFor="let feature of features"> <td><a data-toggle="modal" data-target="#myModal">{{feature.title}}</a></td> <td>{{feature.descr}}</td> <td>{{feature.area}}</td> <td *ngIf ="feature.userstories == null" >0</td> <td *ngIf ="feature.userstories != null" > {{feature.userstories.length}}</td> <td><a class='btn btn-info btn-xs' (click)="editFeature(feature._id)"><span class="glyphicon glyphicon-edit"></span> Edit</a> <a (click)="deleteFeature(feature)" class="btn btn-danger btn-xs"><span class="glyphicon glyphicon-remove"></span> Del</a></td> </tr> </tbody> </table> </div> </div> </div> <button type="button" class="btn btn-default" (click)="open()">Open me!</button> ` }) export class FeatureComponent extends ComponentAction{ features:Features[] mode :string = "start"; isEditMode = false; selectedFeature: Features; constructor(private featureService:FeatureServices,private modalService: NgbModal){ super(); this.getFeatures(); } getFeatures(){ this.featureService.getFeatures() .subscribe(result => { console.log('features from mongo :'+JSON.stringify(result)) this.features = result; console.log('this features :'+JSON.stringify(this.features)) }) } open() { console.log('u clicked me'); const modalRef = this.modalService.open(StoryComponents); modalRef.componentInstance.name = 'World'; console.log('finshed'); } }

I have a list of features and each feature contains different user stories, so am planning to display the option to add user stories into the future on the modal.but while clicking the StoryComponent is not displaying.我有一个功能列表,每个功能都包含不同的用户故事,因此我计划在模态上显示将用户故事添加到未来的选项。但是单击 StoryComponent 时未显示。

I faced the same problem, the issue was with CSS.我遇到了同样的问题,问题出在 CSS 上。 When I check the elements of the document, find that the modal elements was created but not showing in the screen.当我检查文档的元素时,发现模态元素已创建但未显示在屏幕中。 Below css has solved the issue.下面的css已经解决了这个问题。

   .modal-backdrop.fade
   {
     opacity: 0.5;
   }
   .modal-open .modal
   {
     opacity: 1;
   }

ng-bootstrap 仅适用于 Bootstrap 4,与 Bootstrap 3 不兼容。

As @Ansar Samad pointed out it only works with bootstrap 4. If you need it in a Bootstrap 3 project you can checkout https://www.npmjs.com/package/ng-bootstrap-to-bootstrap-3正如@Ansar Samad 指出的,它只适用于 bootstrap 4。如果你在 Bootstrap 3 项目中需要它,你可以查看https://www.npmjs.com/package/ng-bootstrap-to-bootstrap-3

Intructions:说明:

  • npm install ng-bootstrap-to-bootstrap-3

  • import 'ng-bootstrap-to-bootstrap-3' somewhere in your code.在代码中import 'ng-bootstrap-to-bootstrap-3'某处import 'ng-bootstrap-to-bootstrap-3'

That's it!就是这样!

I also had same problem, and found out that I was not including css link for bootstrap in my styles.css .我也遇到了同样的问题,发现我的styles.css没有包含 bootstrap 的 css 链接。 Although I was using ng-bootstrap with bootstrap v4.虽然我在 bootstrap v4 中使用了 ng-bootstrap。

@import url('../node_modules/bootstrap/dist/css/bootstrap.min.css');

Now update @ng-bootstrap/ng-bootstrap to ^8.0.1 solves this error,现在更新@ng-bootstrap/ng-bootstrap^8.0.1解决了这个错误,

After updating if you get this error:更新后如果出现此错误:

ERROR in getInternalNameOfClass() called on a non-ES5 class在非 ES5 类上调用 getInternalNameOfClass() 中的错误

Try changing target in the compilerOptions of your tsconfig.json from es5 to es2015尝试将tsconfig.jsoncompilerOptions中的tsconfig.jsones5es2015

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM