Как исправить «ОШИБКА RangeError: Превышен максимальный размер стека вызовов» с угловой маршрутизацией и переопределением функций - PullRequest
0 голосов
/ 08 ноября 2019

Я не специалист по javascript и Angular, и я не очень хорошо понимаю, как работает маршрутизация. Так как в одном компоненте я переопределяю функцию, вызывающую ее super с помощью «apply», во второй раз, когда я «маршрутизирую» этот компонент, происходит бесконечный рекурсивный вызов.

Проблема в следующем: у меня есть компонент Aи компонент B

Компонент A выполняет:

<a [routerLink]="['/nodes', fullnode.my_node.id]" [state]="fullnode">Edit node 0</a>

Компонент B содержит код для переопределения библиотечной функции MxGraph:

mx.graphHandlerMouseUp = mx.mxGraphHandler.prototype.mouseUp;
mx.mxGraphHandler.prototype.mouseUp = function(graph, evt) {
      currentdropX = evt.graphX;
      currentdropY = evt.graphY;
      mx.graphHandlerMouseUp.apply(this, arguments);
    }

И средство возврата к компонентуA:

router.navigate(['/game']);

Я задал подобный вопрос здесь: Бесконечный цикл при переопределении graphHandlerMouseUp на MxGraph с использованием Angular . Но я чувствую, что проблема не в самой библиотеке mxGraph, а в том, как Angular загружает компоненты.

Когда я делаю: Компонент A -> Компонент B mx.graphHandlerMouseUp сначала не определен, а затем становитсяопределено в ngAfterViewInit () компонента B.

Когда я это сделаю: Компонент A -> Компонент B -> Компонент A -> Компонент B mx.graphHandlerMouseUp уже определен, и именно здесь происходит рекурсия infinte (потому чтоof the apply).

Быстрое исправление может проверять, если mx.graphHandlerMouseUp уже определен, и это на самом деле работает. Тем не менее, я переопределяю многие другие функции той же библиотеки, и даже если они не аварийно завершают работу, они не работают (некоторые из них даже не переходя назад и вперед к компоненту A, просто используя их дважды) ...

Любые разъяснения или предложения приветствуются ...

...