Angular2进阶之如何避免Dom误区


Posted in Javascript onApril 02, 2018

前言

Angular2的设计目标本来就是要让浏览器和DOM独立。DOM是复杂的,因此使组件与它分离,会让我们的应用程序,更容易测试和重构。为了支持跨平台,Angular还通过抽象封装了不同平台的差异。

内容

1.为什么不能直接操作DOM?

Angular2采用AOT静态编译模式,这种形式下需要我们的模板类型必须是稳定和安全的,直接使用javascript和jquery语言是不稳定,因为他们的编译不会提前发现错误,所以angular2才会选择javascript的超集typescript语言(这种语言编译期间就能发现错误)。 

2.三种错误操作DOM的方式:

@Component({ ... })
export class HeroComponent {
 constructor(private _elementRef: ElementRef) {}

 doBadThings() {
  $('id').click(); //jquery
  this._elementRef.nativeElement.xyz = ''; //原生的ElementRef
  document.getElementById('id'); //javascript
 }
}

3.Angular2如何DOM操作的机制?

为了能够支持跨平台,Angular 通过抽象层封装了不同平台的差异。比如定义了抽象类 Renderer、Renderer2 、抽象类 RootRenderer 等。此外还定义了以下引用类型:ElementRef、TemplateRef、ViewRef 、ComponentRef 和 ViewContainerRef 等。 

4.正确操作DOM的方式(ElementRef和Renderer2):

product.component.html

<div>商品信息</div>
<ul>
 <li *ngFor="let product of dataSource| async as list">
  {{product.title}}
 </li>
</ul>
<div #dia>
</div>

product.component.ts

import { Component, OnInit,Renderer2, ViewChild,ElementRef,AfterViewInit} from '@angular/core';
@Component({
 selector: 'app-product',
 templateUrl: './product.component.html',
 styleUrls: ['./product.component.css']
})

export class ProductComponent implements OnInit,AfterViewInit {
 @ViewChild('dia') dia:ElementRef ;定义子试图
 ngOnInit() {
 /**1.
 *创建一个文本
 */
  this.dia.nativeElement.innerHTML="这只是一个测试的文档";

 /**2.
  *添加click事件
  */
 let ul=this.element.nativeElement.querySelector('ul');
  this.render2.listen(ul,"click",()=>{
   this.render2.setStyle(ul,"background","blue");

ngAfterViewInit(){
/**3.
 *修改背景颜色
 */
 let li=this.element.nativeElement.querySelector('ul');
 this.render2.setStyle(li,"background","red");
 }
}

总结

学习一种语言其实我们首先应该去遵循他的规范,接受他和之前语言的不同之处,然后再去深入理解和之前的方式不一样在哪里,为什么这么做,否则我们无法理解这种语言的妙处,希望对你有帮助!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript string 扩展库代码
Apr 09 Javascript
原生Js实现按的数据源均分时间点幻灯片效果(已封装)
Dec 28 Javascript
jQuery文件上传插件Uploadify使用指南
Jun 05 Javascript
推荐8款jQuery轻量级树形Tree插件
Nov 12 Javascript
javascript中定义类的方法详解
Feb 10 Javascript
jQuery实现根据类型自动显示和隐藏表单
Mar 18 Javascript
JavaScript模拟实现继承的方法
Mar 30 Javascript
浅谈MVC+EF easyui dataGrid 动态加载分页表格
Nov 10 Javascript
Vue.js计算属性computed与watch(5)
Dec 09 Javascript
JavaScript用二分法查找数据的实例代码
Jun 17 Javascript
JavaScript之Date_动力节点Java学院整理
Jun 28 Javascript
使用ng-packagr打包Angular的方法示例
Sep 21 Javascript
Vue项目分环境打包的实现步骤
Apr 02 #Javascript
详解webpack-dev-server的简单使用
Apr 02 #Javascript
webpack v4 从dev到prd的方法
Apr 02 #Javascript
vue axios登录请求拦截器
Apr 02 #Javascript
webpack+react+antd脚手架优化的方法
Apr 02 #Javascript
vue axios请求超时的正确处理方法
Apr 02 #Javascript
JavaScript 日期时间选择器一些小结
Apr 02 #Javascript
You might like
PHP获取MSN好友列表类的实现代码
2013/06/23 PHP
php mail to 配置详解
2014/01/16 PHP
IE7提供XMLHttpRequest对象为兼容
2007/03/08 Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
JS实现字体选色板实例代码
2013/11/20 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
JSuggest自动匹配下拉框使用方法(示例代码)
2013/12/27 Javascript
js+jquery实现图片裁剪功能
2015/01/02 Javascript
鼠标事件的screenY,pageY,clientY,layerY,offsetY属性详解
2015/03/12 Javascript
BootStrap扔进Django里的方法详解
2016/05/13 Javascript
js 获取json数组里面数组的长度实例
2017/10/31 Javascript
vue中使用protobuf的过程记录
2018/10/26 Javascript
微信小程序返回上一级页面的实现代码
2020/06/19 Javascript
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
浅析Python中元祖、列表和字典的区别
2016/08/17 Python
Python脚本获取操作系统版本信息
2016/12/17 Python
Python如何实现守护进程的方法示例
2017/02/08 Python
利用numpy实现一、二维数组的拼接简单代码示例
2017/12/15 Python
pandas 读取各种格式文件的方法
2018/06/22 Python
python实现图片批量压缩程序
2018/07/23 Python
mac安装pytorch及系统的numpy更新方法
2018/07/26 Python
Python计算库numpy进行方差/标准方差/样本标准方差/协方差的计算
2018/12/28 Python
用Python+OpenCV对比图像质量的几种方法
2019/07/15 Python
Python实现时间序列可视化的方法
2019/08/06 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
2020/05/24 Python
Python 实现 T00ls 自动签到脚本代码(邮件+钉钉通知)
2020/07/06 Python
Python识别处理照片中的条形码
2020/11/16 Python
鱼油专家:Omegavia
2016/10/10 全球购物
美国最大的无人机经销商:DroneNerds
2018/03/20 全球购物
传媒专业推荐信范文
2013/11/23 职场文书
《金子》教学反思
2014/04/13 职场文书
2014年政府采购工作总结
2014/12/09 职场文书
2015关于重阳节的演讲稿
2015/03/20 职场文书
Python re.sub 反向引用的实现
2021/07/07 Python
Python集合set()使用的方法详解
2022/03/18 Python
Java 超详细讲解十大排序算法面试无忧
2022/04/08 Java/Android