Функция Angular 10 SVG getBBox() возвращает неправильные значения

#angular

#angular

Вопрос:

У меня есть шаблон, подобный этому.

 <svg #connectorSVG [style.width.px]="diagramConnector.Width" [style.height.px]="diagramConnector.Height" >
  <g class="diagram-item-connector-line-path" >
    <path [attr.d]="diagramConnector.ConnectorPath" pointer-events="visibleStroke" fill="none" stroke-width="2"></path>
  </g>
</svg>
  

И вот как я вызываю getBox()

 @ViewChild('connectorSVG', { static: false }) connectorSVG: ElementRef;
resetPath(path: string) {
  this.diagramConnector.ConnectorPath = path;
  let rect = this.connectorSVG.nativeElement.getBBox();
  this.diagramConnector.Height = rect.height;
  this.diagramConnector.Width = rect.width;
}
  

Как вы можете видеть, я привязываю [attr.d] к свойству diagramConnector.ConnectorPath.

И вот в чем проблема.

Я вызываю #connectorSVG.getBox() сразу после значения diagramConnector.Изменен путь подключения для обновления ширины и высоты SVG. Но иногда я получаю правильную ширину и высоту, а иногда я получаю неправильную ширину и высоту от #connectorSVG.getBox().

Но когда я вызываю #connectorSVG.getBox() секундой позже, она всегда возвращает правильные ширину и высоту.

Я пробовал getBoundingClientRect(), но у него такое же поведение.

Это потому, что требуется некоторое время для привязки к свойству и обновления DOM? Если да, то как я узнаю, когда привязка завершена, и DOM обновляется после изменения значения свойства?

Или есть другие причины задержки? и как я могу всегда получать правильное значение?

К вашему сведению, я не могу использовать afterviewinit, потому что путь постоянно меняется после инициализации представления.

Комментарии:

1. Покажите, пожалуйста getBox() . Если этот метод подготавливает ширину, высоту, значит, проблема в этом

2. ОК. Я только что добавил код, в котором я вызываю getBBox().