Renderer
和ElementRef
之間的區別是什麼?在Angular中,兩個都用於DOM操作。我目前單獨使用ElementRef
來編寫Angular 2指令。如果我獲得關於Renderer
的更多信息,我可以在未來的指令中使用它。角度2中的渲染器和ElementRef之間的區別
回答
Renderer
是一個DOM類的部分抽象類。 使用Renderer
來操縱DOM不會中斷服務器端呈現或Web工作者(其中直接訪問DOM會中斷)。
ElementRef
是一個可以容納對DOM元素的引用的類。 這又是一個抽象,在瀏覽器DOM實際上不可用的環境中不會中斷。
如果將ElementRef
注入到組件,則注入的實例是對當前組件的主機元素的引用。
還有其他的方法來獲取ElementRef
例如像@ViewChild()
,@ViewChildren()
,@ContentChild()
,@ContentChildren()
。在這種情況下,ElementRef
是對模板或子模塊中匹配元素的引用。
Renderer
和ElementRef
不是「這個或那個」,而是他們必須一起使用才能獲得完整的平臺抽象。
Renderer
作用於DOM而ElementRef
是對DOM中的元素的引用Renderer
的作用。
請注意,您應該避免使用ElementHref標記爲安全風險。
角2文檔:
「行政法規對DOM的直接訪問可以使你的應用程序更容易遭受XSS攻擊仔細檢查代碼中的任何使用ElementRef的更多詳細信息,請參閱安全指南。 「
「使用此API作爲需要直接訪問DOM的最後手段時,請使用由Angular提供的模板和數據綁定,或者您可以查看Renderer,它提供了即使在直接訪問時也可以安全使用的API不支持本地元素。「
實際上使用'ElementRef'本身不會造成任何傷害。罪魁禍首是'ElementRef.nativeElement'。這是恕我直言(我只是一個安全專家)只有安全相關,如果用戶提供的數據用於添加到DOM,對不對? –
- 1. 渲染:動作和渲染之間的區別:模板
- 2. 瀏覽器和Illustrator之間svg渲染的區別
- 3. YieldRouter中的yieldTemplates和渲染之間的區別
- 4. 角度2模塊和Javascript ES6模塊之間的區別
- 5. 在Safari中的HTML和SVG跨度渲染之間的奇怪區別
- 6. 瀏覽器渲染嚴格/過渡DOCTYPE之間的區別
- 7. Doom和Quake 3D渲染之間的區別
- 8. OpenGL和WebGL之間的Alpha渲染區別
- 9. FF2和FF3之間的渲染區別是什麼?
- 10. 角度:$路由器和$ rootRouter之間的區別?
- 11. 如何在角度2中更新ElementRef
- 12. 調用渲染和離開隱式渲染運行之間有什麼區別?
- 13. 角度4中的HTTP和HTTPClient之間的區別?
- 14. Grails中渲染和模型的區別
- 15. 之間的區別!和!在角
- 16. ElementRef安全風險角度2
- 17. 渲染緩衝區附件和紋理附件之間的區別
- 18. 角度上的onLoad和ng-init之間的區別
- 19. Long.toBinaryString()和Long.toString(num,2)之間的區別?
- 20. [Object,Object]和Array之間的區別(2)
- 21. 角度材質2 - 未完整渲染
- 22. CSS三角形與unicode的瀏覽器渲染/定位區別
- 23. 從任何角度來看,++ i和i + = 1之間的區別
- 24. ng模型和角度表達式之間的區別 - {{}}
- 25. 角度提交和ngSubmit事件之間的區別?
- 26. jQuery mobile:數據角色和角色/類別之間的區別
- 27. Bootstrap中的容器,行和跨度之間的區別
- 28. 通過WEBGL_depth_texture渲染緩衝區對象和深度紋理之間的區別是什麼?
- 29. 角度2和角度輸入有什麼區別?
- 30. FF/IE和Chrome之間的CSS文本下劃線渲染區別
我想知道爲什麼渲染器方法需要'elementRef.nativeElement'而不是像'viewContainerRef'一樣使用'elementRef'。這似乎有點不一致。有任何想法嗎? –
它看起來不一致,但我認爲它不是。在早期的beta版本中,'renderer'只是使用'ElementRef',但後來改變了它。我認爲像'Universal'這樣的平臺''ElementRef.nativeElement'實際上並不是指DOM元素。如果你檢查https://angular.io/docs/ts/latest/api/core/index/ElementRef-class.html,你會看到'nativeElement'的類型是'any'而不是'HTMLElement' –
_在早些時候測試版本渲染器只是採用了ElementRef,但後來改變了它._ - 這很有趣,謝謝。是的,'nativeElement'可以引用特定於平臺的元素,但是傳遞elementRef而不是elementRef.nativeElement仍然是一個更高的抽象,並且會以任何方式工作 –