Как внедрить дочерний маршрутизатор в диалоговую модель представления

В нашем проекте у нас есть несколько таких элементов:

<entity-link id="entity.id>

в основном это просто делает ссылку на экран редактирования объекта

<template>
    <a class="entity-link"
       route-href="route: ENTITY_EDIT; params.bind: { id: entity.id }"
            >${entity.name}
    </a>
</template>

проблема в том, что это не работает вообще в контексте Aurelia Dialog.href приписывается не заселен вообще.

Я пытался исследовать проблему, я ввел маршрутизатор непосредственно в модель представления диалога.

import {Router} from 'aurelia-router';
@inject(DialogController, Router)
export default class RecordDetailsDialog {
constructor(dialogController:DialogController, router:Router) {
        this.controller = dialogController;
        this.router = router;     /// WRONG INSTANCE!!!
    }
}

и выяснил, что вводится неправильный экземпляр маршрутизатора. Основной маршрутизатор (AppRouter) не определяет маршрут ENTITY_EDIT, он динамически добавляется в функцию дочернего маршрута configureRoute.

Я не понимаю, почему внедренный маршрутизатор является основным, а не переданным в представление, которое инициирует открытие диалога.

Любой совет, пожалуйста

1 ответ

Поэтому после 2 часов чтения исходного кода aurelia я обнаружил, что экземпляр DialogService создается в корневом контейнере DI, который связан с корневым маршрутизатором, который не знает о дочерних маршрутах. Я решил эту проблему, зарегистрировав экземпляр DialogService вручную в контейнере дочерней модели представления.

  import {Container} from 'aurelia-dependency-injection';
  import {CompositionEngine} from 'aurelia-templating';
  import {DialogService} from 'aurelia-dialog';

  export class Main {

  constructor(container:Container, compositionEngine:CompositionEngine){
    container.registerInstance(DialogService, new DialogService(container,   compositionEngine))`
  }
     ...
  } 

но это кажется хакерским, все еще задаваясь вопросом, есть ли более чистый способ решить проблему.

Другие вопросы по тегам