代码之家  ›  专栏  ›  技术社区  ›  Aw3same

布尔值不变

  •  2
  • Aw3same  · 技术社区  · 6 年前

    我有个问题。搜索了几个小时后,我找不到对此的解释。我想显示模态(来自 primeNG )并在用户单击按钮时显示它。这个按钮调用(带有id)我的API REST并提供非常简单的信息。我收到了信息,但当模态应该显示时,这不会发生。

    地图组成部分ts

    export class MapComponent implements OnInit {
    
      public alteraciones: any[];
      public alteracion: any = {};
      display: boolean = false;
    /*...*/
    generateData(map: L.map) {
        const data: any[] = [];
        let marker: any;
    
        L.geoJson(this.alteraciones, {
          pointToLayer: (feature, latlng) => {
            marker = L.marker(latlng, {
              icon: this.getIconMarker(feature.properties.tipo_alteracion)
            });
    
            marker.on('click', (e) => {
              this.getInfoAlteracion(feature.properties.id_alteracion); // <==
            });
            data.push(marker);
          }
        });    
    /*...*/
    
      }
    /**...**/
    getInfoAlteracion(id_alteracion: string) {
        this.mapService.getInfoAlteracion(id_alteracion).subscribe(
          result => {
            this.alteracion = result;
            console.log(this.alteracion); // < == Information OK
            this.display = true; // <== this variable should change but doesn't
          },
          err => console.log(err)
        );
      }
    
    }
    

    地图组成部分html

    <p-dialog header="Info" [(visible)]="display" modal="modal" width="500" [responsive]="true">
    <!--some code-->
      <p-footer>
        <button type="button" pButton icon="fa-close" (click)="display=false" label="Cerrar"></button>
      </p-footer>
    </p-dialog>
    

    但是,当我重新编译或关闭服务器时,display变量的值会更改,并显示模式。我找不到解释,知道吗?

    编辑

    可能的冲突:

    @asymmetrik/ngx传单:3.0.2

    @asymmetrik/ngx传单标记聚类:1.0.0

    编辑2

    我还添加了一个新的标记,其中包含一个要更改的新变量,但不起作用。在这一点上,我认为(而且我90%肯定)这是一个 component.ts component.html

    2 回复  |  直到 6 年前
        1
  •  0
  •   Bhammarker Rahul    6 年前

    尝试将该布尔显示属性公开!

        2
  •  0
  •   Aw3same    6 年前

    最后,我解决了这个问题。多亏了这个 link ,我意识到这是库之间的兼容性问题。传单事件处理程序在Angular的区域之外运行,在该区域中不会自动检测到对输入绑定字段的更改。为了确保检测并应用我的更改,我需要在Angular的区域内进行更改。将此添加到代码中,最后,所有工作:

    constructor(private mapService: MapService, private zone: NgZone) { }
    
     marker.on('click', (e) => {
              this.zone.run(() => {
                this.getInfoAlteracion(feature.properties.id_alteracion);
              });
            });
            data.push(marker);
          }
    

    谢谢大家的帮助!