7.4 renderer 使用渲染器 - RLwu/angular-start GitHub Wiki
renderer - 使用渲染器
在EzHilight指令的实现中,我们是直接通过ElementRef对象的nativeElement 属性来直接操作浏览器DOM的,不过Angular2其实不希望我们这么做,因为这将使 我们的代码与浏览器纠缠不清,有违Angular2的跨平台本意 —— 换句话说,这么直接 操作DOM的做法,是反模式的。
在Angular2中,引入了渲染器/renderer的概念,它定义了一组规范的接口Renderer, 对于不同的平台,有不同的实现。比如,对于浏览器,对应的Renderer实现是DomRenderer。
在指令的构造函数中,我们可以要求Angular2框架注入当前使用的渲染器对象:
class EzHilight{
constructor(@Inject(ElementRef) el,@Inject(Renderer) renderer){
this.el = el;
this.renderer = renderer;
}
}
Angular2希望我们使用Renderer来代替直接的DOM操作,这将保证我们的代码获得 跨平台特性。现在我们使用Renderer的setElementStyle()方法来修改样式:
class EzHilight{
set bgColor(v){
this.renderer.setElementStyle(this.el,"background",v);
}
}