想象一下,我会有一个应该接收事件的组件,例如"player" . 用户可能想要向玩家触发事件,例如"play"或"pause" . 根据我的理解, @inputs
基本上是我们发送给组件的值(而不是事件) . 将这些事件触发到组件的好习惯是什么?
考虑一个玩家的例子: - 玩家没有UI,它只是一个能够加载源文件的标签 . - 我们需要找到一种方便的方法来驱动这个玩家发起诸如“开始”,“停止”,“暂停”等事件......
我考虑在 <player [controls]=controls src="somefile.mp3"/>
等参数中传递eventEmitter,其中 control
将是EventEmitter . 然后,组件's controller would internally observe this emitter'事件并相应地动作(播放,停止,暂停......) .
任何其他解决方案/惯例来实现这一点?
更多想法:
-
在玩家的dom元素上创建自定义特定事件,然后trigger事件
-
找到一种方法来获取代码中的组件控制器,并直接调用公共函数,如play(),pause()....但后来它可能是一个与网络工作者的反对 .
1 回答
要使组件响应收到的事件,您可以使用
@HostListener()
如果您使用in Angular2 how to know when ANY form input field lost focus中显示的
Renderer
来发送事件,它将与WebWorkers一起使用 .你也可以使用
全球倾听这些事件 .
我不确定这是适合您情况的最佳解决方案 . 这只会侦听
SomePlayer
中触发的事件 . 只有DOM事件冒泡,而EventEmitter
发出的事件则不是 .一种方法是使用模板变量来直接从控件引用播放器并直接调用
MyPlayer
组件上的方法 .你也可以使用
来自其模板中具有
<my-player>
的组件类 .