2017-09-07 51 views
1

我創建了一個自定義指令來打開新選項卡中的鏈接,在ng服務器中運行時,它可以工作。但是,當我嘗試在ng build --prod時,顯示以下錯誤:無法解析自定義指令的所有參數

錯誤無法解析C:/ Users/myApp/src/app/directives/open-link-in中的OpenLinkInNewTabDirective的所有參數-new-tab.directive.ts:([object Object],?)。

這裏的指令:

import { Directive, ElementRef, HostListener, Input, Inject } from '@angular/core'; 

@Directive({ selector: '[newTab]' }) 
export class OpenLinkInNewTabDirective { 
    constructor(
     private el: ElementRef, 
     @Inject(Window) private win:Window 
    ) {} 

    @Input('routerLink') link: string; 
    @HostListener('mousedown') onMouseEnter() { 
     this.win.open(this.link || 'main/default'); 
    } 
} 

我設置 「emitDecoratorMetadata」:在tsconfig.json已經成爲事實。 預先感謝您。

回答

1

這是已知的問題,因爲Window是一個打字稿界面。 你需要創建一個假類是欺騙編譯器說WindowWrapper.ts

@Injectable() 
export class WindowWrapper extends Window { } 
export function getWindow() { return window; } 

app.module:

import { WindowWrapper, getWindow } from './WindowWrapper'; 

providers: [ 
    {provide: WindowWrapper, useFactory: getWindow} 
    ], 

指令:

import { Directive, ElementRef, HostListener, Input, Inject } from '@angular/core'; 
import { WindowWrapper } from './WindowWrapper'; 

@Directive({ 
    selector: '[newTab]' 
}) 
export class OpenLinkInNewTabDirective { 
    constructor(
     private el: ElementRef, 
     @Inject(WindowWrapper) private win: Window) {} 

    @Input('routerLink') link: string; 
    @HostListener('mousedown') onMouseEnter() { 
     this.win.open(this.link || 'main/default'); 
    } 
} 

支票上isse和特定的詳細資料comment

+0

非常感謝你,t他解決了我的問題:) –

相關問題