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:window.open弹出窗口的位置问题
Mar 18 Javascript
jQuery中:empty选择器用法实例
Dec 30 Javascript
jQuery中append()方法用法实例
Jan 08 Javascript
JavaScript绑定事件监听函数的通用方法
May 14 Javascript
Javascript小技能总结(推荐)
Jun 02 Javascript
多功能jQuery树插件zTree实现权限列表简单实例
Jul 12 Javascript
用原生JS对AJAX做简单封装的实例代码
Jul 13 Javascript
js代码实现下拉菜单【推荐】
Dec 15 Javascript
jquery中each循环的简单回滚操作
May 05 jQuery
Vue 组件参数校验与非props特性的方法
Feb 12 Javascript
VUE:vuex 用户登录信息的数据写入与获取方式
Nov 11 Javascript
jQuery HTML css()方法与css类实例详解
May 20 jQuery
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
短波收音机简介
2021/03/01 无线电
PHP入门教程之操作符与控制结构流程详解
2016/09/09 PHP
详解将数据从Laravel传送到vue的四种方式
2019/10/16 PHP
关于PHP求解三数之和问题详析
2020/11/09 PHP
JavaScript使用技巧精萃[代码非常实用]
2008/11/21 Javascript
JQuery动画和停止动画实例代码
2013/03/01 Javascript
jquery实现鼠标拖动图片效果示例代码
2014/01/09 Javascript
Javascript异步编程模型Promise模式详细介绍
2014/05/08 Javascript
JS动态添加iframe的代码
2015/09/14 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
老生常谈angularjs中的$state.go
2017/04/24 Javascript
JavaScript方法_动力节点Java学院整理
2017/06/28 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
关于Vue.nextTick()的正确使用方法浅析
2017/08/25 Javascript
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
2018/11/08 Javascript
Vue 前端实现登陆拦截及axios 拦截器的使用
2019/07/17 Javascript
使用layui的router来进行传参的实现方法
2019/09/06 Javascript
Vue 实现输入框新增搜索历史记录功能
2019/10/15 Javascript
在windows下快速搭建web.py开发框架方法
2016/04/22 Python
python 队列详解及实例代码
2016/10/18 Python
python 捕获 shell/bash 脚本的输出结果实例
2017/01/04 Python
Python实现学生成绩管理系统
2020/04/05 Python
pandas apply 函数 实现多进程的示例讲解
2018/04/20 Python
解决python opencv无法显示图片的问题
2018/10/28 Python
Python实现链表反转的方法分析【迭代法与递归法】
2020/02/22 Python
python 获取计算机的网卡信息
2021/02/18 Python
UGG澳洲官网:UGG Australia
2018/04/26 全球购物
加州风格的游泳和沙滩装品牌:Cupshe
2019/06/10 全球购物
马来西亚在线购物市场:PGMall.my
2019/10/13 全球购物
如何防止同一个帐户被多人同时登录
2013/08/01 面试题
新学期教师寄语
2014/04/02 职场文书
《狼和小羊》教学反思
2014/04/20 职场文书
董事长秘书工作职责
2014/06/10 职场文书
廉洁自律承诺书2015
2015/01/22 职场文书
2015年反腐倡廉工作总结
2015/05/14 职场文书
2015年街道办事处团委工作总结
2015/10/14 职场文书