其他人评论说,这种行为可能更适合于
Component
或者
Directive
,但在较低的层次上看到Angular中发生的事情是很有趣的。这是一个非常模块化的框架,这是一个很好的机会来学习更多关于DI的知识。
这个
Renderer2
模板
通过内部
Renderer2Interceptor
. 它也有不同的
范围
而不是在根级别注入的提供者或其他全局角度提供者:因为它用于呈现组件和指令的模板,所以它的范围仅限于那些类型的声明。它是一个非常低级的提供者,Angular使用它来创建带有视图的声明,因此它可以被注入到视图中——因为服务也是一个
@Injectable
,角度DI层次结构分别处理它们,因此
渲染器2
在其层次结构中不可用。
渲染器2
declarations
在模块中。但不是
providers
.
声明
是否附加了实例和需要的模板,但是
使用
RendererFactory
只有这样
直接地
注入
渲染器2
变成一种服务。
而我认为你不想再制造一个
渲染器2
是有效的,请在上查看此评论
the Angular repo:
rendererFactory.createRenderer(null, null)
如果没有,会有帮助的
(具体)参数传递时,它将只返回默认的渲染器
不创建新的(碳化硅)
所以,使用
RendererFactory2.createRenderer(null, null)
DomRenderer
. 这个工厂的存在是为了创造一个
值得庆幸的是,Angular得到了很好的维护,不会产生重复
如果工厂被叫来。
所以,只要注射
RendererFactory2
并获取默认值
从它那里。
因为我知道
Renderer
是重要的角度和工作,所以努力使用它。有太多的人直接去DOM操作。