Angular 在“单击”和“函数()”操作的传单后打开“角度材质”对话框

Angular 在“单击”和“函数()”操作的传单后打开“角度材质”对话框,angular,angular-material,leaflet,ngx-leaflet,Angular,Angular Material,Leaflet,Ngx Leaflet,我想在单击传单圆时打开一个“角度材质”对话框。 对话框出现,但行为异常。当我用普通按钮(单击)事件打开对话框时,这种奇怪的行为不会出现 我尝试这样调用函数。我将onClickCircles函数绑定到我的圆 let line = L.circle(latlngEx, { radius: this.circles[i].radius }).on( "click", this.onClickCircles.bind(this) ); 当按下圆

我想在单击传单圆时打开一个“角度材质”对话框。 对话框出现,但行为异常。当我用普通按钮(单击)事件打开对话框时,这种奇怪的行为不会出现

我尝试这样调用函数。我将onClickCircles函数绑定到我的圆

let line = L.circle(latlngEx, { radius: this.circles[i].radius }).on(
          "click",
          this.onClickCircles.bind(this)
        );
当按下圆圈时,我打开对话框

onClickCircles(e) {
    const dialogRef = this.dialog.open(MarkerdetailComponent, {
      width: "300px",
      data: { event: e, collection: "circles" }
    });
    dialogRef.afterClosed().subscribe(result => {
      console.log("closed")
    });
    //this.deleteCircles(e.target);
  }

当从其他任何地方调用onClickCircle(e)时,它工作正常。我猜是因为.bind(这个)再次实例化了我的组件,它必须在对话框显示正确之前加载整个组件。但我不确定这一点,也不知道是否有解决办法。

之所以发生此错误,是因为单击函数中的代码没有在角度上下文中执行。可以使用NgZone进行固定

let line = L.circle(latlngEx, { radius: this.circles[i].radius }).on(
          "click",
          e => {
            this.zone.run(() => {
              this.onClickCircles(e)
              })
          }
        );

发生此错误是因为click函数中的代码未在角度上下文中执行。可以使用NgZone进行固定

let line = L.circle(latlngEx, { radius: this.circles[i].radius }).on(
          "click",
          e => {
            this.zone.run(() => {
              this.onClickCircles(e)
              })
          }
        );

当1)模块未正确加载或2)发生运行时错误(通常是由于在尝试设置样式之前未呈现DOM)时,通常会发生类似的情况。很多时候,可以通过将OnInit项设置为AfterViewInit来修复此问题。除非您能够提供StackBlitz,否则很难精确指出超出此范围的确切错误。当1)模块未正确加载或2)发生运行时错误(通常是由于在尝试设置样式之前未呈现DOM)时,通常会发生此类情况。很多时候,可以通过将OnInit项设置为AfterViewInit来修复此问题。除非你能提供一个StackBlitz,否则很难精确地指出超出此范围的确切错误。