未收到自定义指令的输出

Output of custom directive is not received

我正在尝试从自定义指令接收事件,但它不起作用。我的应用程序中有几个成功发送事件的组件,所以我做了一个最小的例子:

<div *appDummyDirective="allTheThings" (dummyOutput)="dummyOuputDirective()">
    appDummyDirective
</div>
<appDummyComponent (dummyOutput)="dummyOuputComponent()"></appDummyComponent>

组件的回调被调用而指令的回调不是:

dummyOuputComponent() {
    console.log('dummyOuputComponent()'); //gets called
}

dummyOuputDirective() {
    console.log('dummyOuputDirective()'); //does not get called!
}

这里是指令和组件的定义。

@Directive({
selector: '[appDummyDirective]'
})

export class DummyDirective{
    @Output() dummyOutput = new EventEmitter<any>();
    @Input() appDummyDirective: any;

    constructor(private viewContainer: ViewContainerRef, private template: TemplateRef<any>) {
        this.viewContainer.createEmbeddedView(this.template);
        setInterval(any => { this.dummyOutput.emit(null); console.log('fire dummy directive'); }, 1000);
    }
}

@Component({
    selector: 'appDummyComponent',
    template: 'appDummyComponent'
})

export class DummyComponent{
    @Output() dummyOutput = new EventEmitter<any>();

    constructor() {
        setInterval(any => { this.dummyOutput.emit(null); console.log('fire dummy component'); }, 1000);
    }
}

指令哪里出错了?

显然 @Output 不适用于 * 的语法糖。

如果您将指令脱糖并将回调绑定应用于 template 元素,它就会起作用。

<template [appDummyDirective]="allTheThings" (dummyOutput)="dummyOuputDirective()">
    <div >
        appDummyDirective
    </div>
</template>