0

我在网上尝试了很多方法,但我无法让它工作。这是我的组件。onSubmit,一个建议是使用 NgbActiveModal 关闭但我收到错误

“错误错误:未捕获(承诺):错误:StaticInjectorError(AppModule)[UserstuffComponent - > NgbActiveModal]:StaticInjectorError(平台:核心)[UserstuffComponent - > NgbActiveModal]:NullInjectorError:NgbActiveModal没有提供者!”

import {Component, ViewChild} from '@angular/core';

    import {NgbModal, ModalDismissReasons, NgbActiveModal} from '@ng-bootstrap/ng-bootstrap';
    import {NgForm} from "@angular/forms";

    @Component({
      selector: 'ngbd-modal-basic',
      templateUrl: './userstuff.component.html'
    })
    export class UserstuffComponent {
      closeResult: string;
      bookTitle;

      constructor(private modalService: NgbModal, public ngbModalService: NgbActiveModal) {}

      open(content) {
        this.modalService.open(content).result.then((result) => {
          this.closeResult = `Closed with: ${result}`;
          console.log(this.closeResult);
        }, (reason) => {
          this.closeResult = `Dismissed ${this.getDismissReason(reason)}`;
          console.log(this.closeResult);
        });
      }

      private getDismissReason(reason: any): void {
        if (reason === ModalDismissReasons.ESC) {
          console.log('by pressing ESC');
        } else if (reason === ModalDismissReasons.BACKDROP_CLICK) {
          console.log('by clicking on a backdrop');
        } else {
          console.log(`with: ${reason}`);
        }
      }

      onSubmit(form : NgForm) {
        console.log(form.value);
        this.ngbModalService.close();
      }
    }

这是我的html。

<ng-template #content let-c="close" let-d="dismiss">
  <div class="modal-header">
    <h4 class="modal-title">Profile update</h4>
    <button type="button" class="close" aria-label="Close" (click)="d('Cross click')">
      <span aria-hidden="true">&times;yo</span>
    </button>
  </div>
  <div class="modal-body">
    <form (ngSubmit)="onSubmit(borrowBook)" #borrowBook="ngForm">
      <div class="form-group">
        <label for="bookTitle">Title of book</label>
        <input type="text" class="form-control" id="bookTitle" placeholder="Title of Book"
               required [(ngModel)]="bookTitle" name="bookTitle">
      </div>
      <button type="submit" class="btn btn-default">Borrow!</button>
    </form>
  </div>
  <div class="modal-footer">
    <button type="button" class="btn btn-outline-dark" (click)="c('with save')">Save</button>
  </div>
</ng-template>

<button class="btn btn-lg btn-outline-primary" (click)="open(content)">Launch demo modal</button>

这是我导入到 app.module.ts 中的 user-view.module.ts。

@NgModule({
  imports: [
    CommonModule,
    UserViewRoutingModule,
    NgbModule.forRoot(),
    FormsModule
  ],
  declarations: [
    UserViewComponent,
    UserhomeComponent,
    UserstuffComponent
  ]
})
export class UserViewModule { }
4

4 回答 4

1
  onSubmit(form : NgForm) {
    console.log(form.value);
    this.modalService.dismissAll('Dismissed after saving data');
  }
于 2020-08-03T20:17:35.137 回答
1
    import { Component, OnInit } from '@angular/core';
    import {NgbModal, ModalDismissReasons} from '@ng-bootstrap/ng-bootstrap';

    @Component({
      selector: 'app-modal-basic',
      templateUrl: './modal-basic.component.html',
      styleUrls: ['./modal-basic.component.css']
    })
    export class ModalBasicComponent implements OnInit {
      modalReference: any; 
      ngOnInit() {}
      // tslint:disable-next-line:member-ordering
      closeResult: string;

      constructor(private modalService: NgbModal) {
      }

      open(content) {
      this.modalReference =  this.modalService.open(content, {size: 'sm'});
      this.modalReference.result.then((result) => {
          this.closeResult = `Closed with: ${result}`;
          console.log('Result Content: ');
          console.log(result);
        }, (reason) => {
          this.closeResult = `Dismissed ${this.getDismissReason(reason)}`;
        });
      }
      c(buttonvalue) {
        if (buttonvalue === 'with save') {
          this.modalReference.close();
        } 
      d(buttonvalue) {
        if (buttonvalue === 'Cross click') {
          this.modalReference.dismiss();
        }

      }

      }

    }

我希望,这将有助于解决这个问题。

于 2018-09-12T12:25:51.653 回答
1

我认为您需要在提供程序中包含“NgbActiveModal”(在 user-view.module.ts 或 app.module.ts 中)

@NgModule({
      imports: [
        CommonModule,
        UserViewRoutingModule,
        NgbModule.forRoot(),
        FormsModule
      ],
      declarations: [
        UserViewComponent,
        UserhomeComponent,
        UserstuffComponent
      ],
    providers: [
      NgbActiveModal
    ]
    })
    export class UserViewModule { }
于 2018-06-30T05:09:44.797 回答
-1

试试这个,调用脚本 data-dismiss

<button type="submit" class="btn btn-default" data-dismiss="modal">Borrow!</button>
于 2018-06-30T06:17:04.723 回答