3

在我们的项目中,我们有一堆这样的自定义元素:

<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 函数中动态添加的。

我不明白为什么注入的路由器是主要的路由器,而不是传递给启动对话框打开的视图的路由器。

请有任何建议

4

1 回答 1

0

所以在阅读 aurelia 的源代码 2 小时后,我发现 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))`
  }
     ...
  } 

但感觉很hacky,仍然想知道是否有更干净的方法来解决问题。

于 2016-11-08T22:43:42.047 回答