angular – @HostListener和Renderer.listen之间哪个更好?

前端之家收集整理的这篇文章主要介绍了angular – @HostListener和Renderer.listen之间哪个更好?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在构建一个类似于 http://rectangleworld.com/demos/SimpleDragging/SimpleDragging的简单画布拖放应用程序.对于mouseevent监听器,我使用了@Hostlistener,因为对我来说它具有更简单的语法并且它正在工作.使用Renderer.listen可以实现另一种方法.但我不能决定在hostlistener上使用它.任何人都可以解释并告诉@HostListener和Renderer.listen之间哪个更好?
我的回答可能不是最好的,但这就是我得到的.

Renderer.listen()

当谈到Renderer.listen()时,你需要传递你想要检测的元素,然后传递要监听的事件(click,keydown,keyup等),最后是回调函数

代码中,这是listen()函数(*)中发生的事情:

listen(renderElement: any,name: string,callback: Function): Function {
  return this._rootRenderer.eventManager.addEventListener(renderElement,name,decoratePreventDefault(callback));
}

所以问题现在只是指定元素(简单),但人们通常使用elementRef.nativeElement,这是一个安全风险,根据Angular Documentation,所以在使用之前一定要确定!另一个问题(不会真的)是Renderer类是实验性的(Check its Documentation),我遇到了setText()的问题,它曾经在RC中工作但是现在它不是..所以是的,在使用它们之前测试Renderer功能是否正常. aaaaaaand当你完成后,你需要手动取消绑定事件!,Check this answer for more.

但是我会关注渲染器的状态,因为它的主要目的是在任何环境(Web,Node,Mobiles,.etc)上渲染元素,只有一个代码库,所以是的,我们希望它在未来变得稳定.

@HostListener()

HostListener是一个很棒的装饰器,它展示了Angular2与TypeScript一起工作的好处,你只需要设置事件和传递给回调函数的值(它下面的函数),通常人们只需传递[$event]就可以了更多地控制函数内部的验证,并且您不需要设置元素,因为它会监听文档,因此它会对事件进行委派,而您不会访问DOM,您的应用程序将受到保护.你也不需要解开事件,Angular会为你做这件事.

Check this article for a working example

希望我的回答有所帮助,记住Angular仍在不断发展,所以有些事情可能会改变.

参考文献:

*:Hacking Angular2: Binding Multiple DOM Events by Sean T. Larkin

猜你在找的Angularjs相关文章