【问题标题】:Angular 2 : EventemitterAngular 2:事件发射器
【发布时间】:2017-01-27 17:28:05
【问题描述】:

我有一个这样的模板:

<main>
    <footer></footer>
</main>

我想从页脚向主要组件发出一个值。在我的父母身上,我有一个名为setStepCounter(value : number) : void 的函数。当我像这样将事件发射器添加到我的页脚组件时:

@Component({
    selector: 'footer',
    template: `<ng-content></ng-content> `,
    host: {
        '(stepCounterEmitter)': 'setStepCounter($event)'
    }
})

我收到以下错误:self.context.setStepCounter 不是函数。

【问题讨论】:

    标签: angular


    【解决方案1】:
    @Component({
        selector: 'footer',
        template: `<ng-content></ng-content> <button (click)="nextCounter()>click me</button> `,
    })
    export class Footer {
      @Output() stepCounter:EventEmitter<number> = new EventEmitter();
    
      private counter:number = null;
      nextCounter() {
        this.stepCounter.emit(this.counter.++);
      }
    }
    
    <main #main>
        <footer (stepCounter)="main.setStepCounter($event)"></footer>
    </main>
    
    export class MainComponent {
      setStepCounter(event:any) {
        ...
      }
    }
    

    【讨论】:

    • 感谢您的回复。我有点想避免将它放在元素本身上,以保持它的清洁。有没有办法在屏幕后面做到这一点?
    • 也许使用服务来传递数据的方法更合适。
    • 实际上,我的回答并不完全正确。也许这就是你想要的更多stackoverflow.com/questions/35574220/…
    • 服务也是一个好主意,特别是如果&lt;main&gt;&lt;footer&gt; 应该一起使用。
    猜你喜欢
    • 1970-01-01
    • 2018-06-01
    • 2017-03-07
    • 1970-01-01
    • 2016-04-21
    • 2017-02-27
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多