2017-09-07 6 views
1

auflösen Ich habe eine benutzerdefinierte Anweisung erstellt, um einen Link in einem neuen Tab zu öffnen, wenn es in ng Serve ausgeführt wird, funktioniert es. Als ich jedoch in ng build --prod versuchte, zeigte es diesen Fehler:Kann nicht alle Parameter für benutzerdefinierte Direktive

FEHLER in Kann nicht alle Parameter für OpenLinkInNewTabDirective in C:/Benutzer/myApp/src/app/directives/open-link-in auflösen -new-tab.directive.ts: ([Objekt Objekt],?). Hier

ist die Richtlinie:

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'); 
    } 
} 

I "emitDecoratorMetadata" gesetzt: true in tsconfig.json bereits. Vielen Dank im Voraus.

Antwort

1

Es ist ein bekanntes Problem, da Windows eine Typoskript-Schnittstelle ist. Sie benötigen einen Compiler Trick durch eine gefälschte Klasse sagen Schaffung 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} 
    ], 

Richtlinie:

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'); 
    } 
} 

Scheck Mehr Details zu diesem isse und diesem speziellen comment

+0

vielen dank, t sein löste mein Problem :) –

Verwandte Themen