首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >模式-引导对话框中未清除的Signaturepad清除属性

模式-引导对话框中未清除的Signaturepad清除属性
EN

Stack Overflow用户
提问于 2019-12-11 18:50:15
回答 1查看 713关注 0票数 2

我正在工作的签名垫对话框和对话框,我是使用引导模式。在此活动中,当我单击“完成活动”时,对话框应打开,询问是或否,单击“是”,对话框中有模态体中的签名垫,模态页脚中有“清除”按钮。

问题是,当单击模态页脚上的“清除”按钮时,“签名垫”模块的“清除”方法无法工作,任何建议都会有很大帮助。

代码语言:javascript
运行
复制
import { Component, OnInit, ViewChild, Directive } from '@angular/core';
import { NgbModalConfig, NgbModal } from '@ng-bootstrap/ng-bootstrap';
import {SignaturePad} from 'angular2-signaturepad/signature-pad';
import { ClickOutsideModule } from 'ng-click-outside';

@Component({
  selector: 'app-modal',
  templateUrl: './modal.component.html',
  styleUrls: ['./modal.component.css']
})
export class ModalComponent {

  @ViewChild('SignaturePad1', { static: true })signaturepad: SignaturePad;

  public signaturepadoption = {
    minWidth: 2,
    penColor: 'rgb(255,0,0)',
    backgroundColor: 'rgb(0,0,0)',
    canvasWidth: 250,
    canvasHeight: 300,
  };

  closeResult: string;

  constructor(private modalService: NgbModal) {}

  openSm(content) {
    this.modalService.open(content, { centered: true });
  }

  SignaturepadPopUp(longContent) {
    this.modalService.open(longContent, { scrollable: true, centered: true });
  }

  onClear() {
    this.signaturepad.clear();
  }

  saveSignature() {
    const base64 = this.signaturepad.toDataURL('image\png', 0.1);
    console.log(base64);
    const blob = this.base64toblob(base64);
    console.log(blob);

  }
  base64toblob(base64) {
    const bytestring = atob(base64.split(',')[1]);
    const stringtype = base64.split(',')[0].split(':')[1].split(':')[0];
    const size = bytestring.length;
    const saveString: any[] = new Array(size);

    for (let i = 0; i < bytestring.length; i++) {
      saveString[i] = bytestring.charAt(i);
    }
    const ia = new Uint8Array(saveString);
    return new Blob([ia], {type: stringtype});
  }

}
代码语言:javascript
运行
复制
<ng-template #content let-modal>
  <div class="modal-header">
    <button type="button" class="close" aria-label="Close" (click)="modal.dismiss('Cross click')">
      <span aria-hidden="true">&times;</span>
    </button>
  </div>
  <div class="modal-body">
    <p>Are you sure You want to complete Activity?</p>
  </div>
  <div class="modal-footer">
    <button type="button" class="btn btn-primary" (click)="modal.close('Close click')">No</button>
    <button type="button" class="btn btn-primary" (click)="SignaturepadPopUp(longContent)">Yes</button>
  </div>
</ng-template>

<ng-template #longContent let-modal>
  <div class="modal-header">
    <button type="button" class="close" aria-label="Close" (click)="modal.dismiss('Cross click')">
      <span aria-hidden="true">&times;</span>
    </button>
  </div>
  <div class="modal-body">
    <div class="col-md-12">
      <div class="m-signature-pad">
          <div class="m-signature-pad-body">
              <signature-pad #SignaturePad1 [options]="signaturepadoption"></signature-pad>
          </div>
      </div>
  </div>
  </div>
  <button type="button" class="btn btn-primary" (click)="onClear()">clear</button>
</ng-template>

<button class="btn btn-secondary" (click)="openSm(content)">Complete Activity</button>

EN

回答 1

Stack Overflow用户

发布于 2022-05-25 09:44:11

之所以会出现这种情况,是因为尚未呈现ng-template,因此签名垫将未定义。我发现解决这个问题的一种方法是在一个单独的组件中创建我的签名垫,然后将该组件添加到ngbModal中。

所以在你的例子中:

代码语言:javascript
运行
复制
<ng-template #longContent let-modal>
  <div class="modal-header">
    <button type="button" class="close" aria-label="Close" (click)="modal.dismiss('Cross click')">
      <span aria-hidden="true">&times;</span>
    </button>
  </div>
  <div class="modal-body">
    <div class="col-md-12">
      <div class="m-signature-pad">
          <div class="m-signature-pad-body">
              <!-- <signature-pad #SignaturePad1 [options]="signaturepadoption"></signature-pad> -->
              <app-my-signature-pad-component></app-my-signature-pad-component> <!-- In this component you add the above commented out line and then do your functionality for the signature pad there. -->
          </div>
      </div>
  </div>
  </div>
  <button type="button" class="btn btn-primary" (click)="onClear()">clear</button>
</ng-template>

我发现,使用这种方法,您可以使用ViewChild,而不需要处理undefined问题。

希望这有意义!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59292229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档