博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Angular学习笔记(四) - Angular Renderer (渲染器)
阅读量:7197 次
发布时间:2019-06-29

本文共 2932 字,大约阅读时间需要 9 分钟。

Angular Renderer (渲染器)


什么是渲染器

渲染器是 Angular 为我们提供的一种内置服务,用于执行 UI 渲染操作。在浏览器中,渲染是将模型映射到视图的过程。模型的值可以是 JavaScript 中的原始数据类型、对象、数组或其它的数据对象。然而视图可以是页面中的段落、表单、按钮等其他元素,这些页面元素内部使用 DOM (Document Object Model) 来表示。

Angular Renderer

  • RootRenderer
export abstract class RootRenderer {  abstract renderComponent(componentType: RenderComponentType): Renderer;}复制代码
  • Renderer
/** * @deprecated Use the `Renderer2` instead. */export abstract class Renderer {  abstract createElement(parentElement: any, name: string,     debugInfo?: RenderDebugInfo): any;  abstract createText(parentElement: any, value: string,     debugInfo?: RenderDebugInfo): any;  abstract listen(renderElement: any, name: string, callback: Function): Function;  abstract listenGlobal(target: string, name: string, callback: Function): Function;  abstract setElementProperty(renderElement: any, propertyName: string, propertyValue:     any): void;  abstract setElementAttribute(renderElement: any, attributeName: string,     attributeValue: string): void;  // ...}复制代码
  • Renderer2
export abstract class Renderer2 {  abstract createElement(name: string, namespace?: string|null): any;  abstract createComment(value: string): any;  abstract createText(value: string): any;  abstract setAttribute(el: any, name: string, value: string,    namespace?: string|null): void;  abstract removeAttribute(el: any, name: string, namespace?: string|null): void;  abstract addClass(el: any, name: string): void;  abstract removeClass(el: any, name: string): void;  abstract setStyle(el: any, style: string, value: any,     flags?: RendererStyleFlags2): void;  abstract removeStyle(el: any, style: string, flags?: RendererStyleFlags2): void;  abstract setProperty(el: any, name: string, value: any): void;  abstract setValue(node: any, value: string): void;  abstract listen(      target: 'window'|'document'|'body'|any, eventName: string,      callback: (event: any) => boolean | void): () => void;}复制代码

需要注意的是在 Angular 6 版本,我们使用 Renderer2 替代 Renderer。通过观察 Renderer 相关的抽象类 (RendererRenderer2),我们发现抽象类中定义了很多抽象方法,用来创建元素、文本、设置属性、添加样式和设置事件监听等。

使用 Renderer

@Component({  selector: 'exe-renderer',  template: `    

Renderer Component

`})export class ExeComponent { constructor(private renderer: Renderer2, el: ElementRef) { this.renderer.setProperty(el.nativeElement, 'author', 'danwang'); }}复制代码

以上代码中,我们利用构造注入的方式,注入 Renderer2ElementRef 实例。

实例

在开发中,我们都比较喜欢用jQuery,因为jQuery操作dom很方便,现在用Renderer2来创建方法也可以很方便的操作DOM

  • 一个给angular中组件移除class的方法
private removeClass(el: HTMLElement, classMap: object, renderer: Renderer2): void {    for (const i in classMap) {      if (classMap.hasOwnProperty(i)) {        renderer.removeClass(el, i);      }    }  }复制代码
  • 添加class方法
private addClass(el: HTMLElement, classMap: object, renderer: Renderer2): void {    for (const i in classMap) {      if (classMap.hasOwnProperty(i)) {        if (classMap[ i ]) {          renderer.addClass(el, i);        }      }    }  }复制代码

转载地址:http://imzum.baihongyu.com/

你可能感兴趣的文章
高级开发不得不懂的Redis Cluster数据分片机制
查看>>
突然,form表单参数提交,但是java接收不到
查看>>
开发Yii2过滤器并通过behaviors()行为调用
查看>>
白话SpringCloud | 第零章:前言
查看>>
XMind中的“任务信息”视图
查看>>
OSChina 双十一乱弹 ——来自单身狗的哀鸣
查看>>
OSChina 周三乱弹 ——我们职业更好的名字:爱码士
查看>>
左边的项目管理器不见了
查看>>
android 获取唯一标识
查看>>
HTML5 - Server-Sent Events
查看>>
为MySQL授权
查看>>
用 Octave 对音频文件进行基本数学的信号处理
查看>>
看视频是好的学习方法
查看>>
Get last order or items of customer in magento
查看>>
centos7安装redis3.2.1
查看>>
聚合数据Android SDK 天气查询演示示例
查看>>
java冒泡排序法
查看>>
tomcat启停脚本高级版
查看>>
【Microsoft Edge中新的F12开发者工具】
查看>>
java基础第五天
查看>>