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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |