【问题标题】:list-formatter called several times多次调用列表格式化程序
【发布时间】:2019-09-20 07:26:25
【问题描述】:

我有一个列表格式化程序(autocompleListFormatter),在启动下拉菜单时会调用它多次。

上图显示了控制台的输出,下拉菜单仅启动一次。

dropdown.component.html

<form [formGroup]="myForm" class="">
  <div class="form-style">
    <input
      autofocus
      [list-formatter]="autocompleListFormatter"
      type="text"
      class="form-control"
      formControlName="gridDropdown"
      [source]="dropdownData"
      value-property-name="id"
      display-property-name="name"
      [(ngModel)]="value"
    />
  </div>
</form>

dropdown.component.ts

export class DropdownComponent implements OnInit, AgEditorComponent {
  @Input() name: String;
  public dropdownData = ColumnData[0].cellEditorParams.values;
  public myForm: FormGroup;
  constructor(private builder: FormBuilder, private _sanitizer: DomSanitizer) {}

// ****DROPDOWN****** //
  autocompleListFormatter = (data: any) => {
    console.log('autocompleListFormatter..............');
    let html = `<span>${data.name}</span>`;
    return this._sanitizer.bypassSecurityTrustHtml(html);
  };

  agInit(params: ICellEditorParams) {
    this.value = params.value;
    this.oldValue = this.value;
    this.value = '';
    return this.value;
  }

  ngOnInit() {
    this.myForm = this.builder.group({
      gridDropdown: ''
    });
  }
}

column-data.ts

export let ColumnData = [
  {
    editable: true,
    cellEditor: 'editComp',
    cellEditorParams: {
      values: [
        { id: 1, name: '200001 - General Management' },
        { id: 2, name: '200002 - Management' },
        { id: 3, name: '200003 - DataCenter' },
        { id: 4, name: '200009 - Location Hamburg' },
        { id: 5, name: '200010 - General Management' },
        { id: 6, name: '200011 - Management' },
        { id: 7, name: '200012 - DataCenter' },
        { id: 8, name: '2000213 - Location Hamburg' }
      ]
    }
  }
];

有什么办法可以避免这种情况吗?我应该使用特定的生命周期挂钩还是其他东西?

【问题讨论】:

    标签: javascript angular typescript dropdown


    【解决方案1】:

    根据 ColumnData 的值数组中存在的项目数,每次都会调用过滤器以创建下拉该时间的跨度。

    可以看到,在 Chrome 中合并日志计数为 8

    【讨论】:

    • 谢谢,是的 - 日志计数为 8,但是当下拉菜单仅启动一次时,这种情况会发生 10 次。这可以接受吗?
    • 可能是在角度绑定和重新绑定
    • 我真的不确定它是否会重新绑定。有没有办法证实这一点?
    • 你说它总共运行了80次
    猜你喜欢
    • 2020-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多