2016-11-08 25 views
2

在我们的项目,我们有一堆自定义元素是这样的:如何子路由器注入到对话视图模型

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

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

任何建议,请

回答

0

做2个小时的阅读奥里利亚的源代码后,我发现,DialogService实例,其与根路由器是不知道关于孩子的路线有关的根DI容器内创建。 我工作围绕我们的问题,通过内儿童视图模型容器

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))` 
    } 
    ... 
    } 

手动注册DialogService实例,但感觉哈克,仍然不知道是否有解决问题的一个更清洁的方式。

相关问题