2016-11-08 24 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實例,但感覺哈克,仍然不知道是否有解決問題的一個更清潔的方式。

相關問題