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 CSS修改学习第一章 查找位置
Feb 19 Javascript
浅谈 jQuery 事件源码定位问题
Jun 18 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
Mar 02 Javascript
jQuery常用且重要方法汇总
Jul 13 Javascript
js实现的简洁网页滑动tab菜单效果代码
Aug 24 Javascript
js跨域资源共享 基础篇
Jul 02 Javascript
深入解析Javascript闭包的功能及实现方法
Jul 10 Javascript
jQuery实现字符串全部替换的方法
Dec 12 Javascript
全面解析Node.js 8 重要功能和修复
Jun 02 Javascript
深究AngularJS中ng-drag、ng-drop的用法
Jun 12 Javascript
详解让sublime text3支持Vue语法高亮显示的示例
Sep 29 Javascript
iview给radio按钮组件加点击事件的实例
Sep 30 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生成xml简单实例代码
2009/12/16 PHP
php Smarty初体验二 获取配置信息
2011/08/08 PHP
php数组函数序列之array_search()- 按元素值返回键名
2011/11/04 PHP
深入解析php中的foreach问题
2013/06/30 PHP
ThinkPHP之N方法实例详解
2014/06/20 PHP
php导出CSV抽象类实例
2014/09/24 PHP
Laravel 5 框架入门(四)完结篇
2015/04/09 PHP
PHP实现适用于文件内容操作的分页类
2016/06/15 PHP
Yii2.0表关联查询实例分析
2016/07/18 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
JS中获取数据库中的值的方法
2013/07/14 Javascript
jQuery操作DOM之获取表单控件的值
2015/01/23 Javascript
Angularjs 创建可复用组件实例代码
2016/10/09 Javascript
Bootstrap CSS组件之按钮下拉菜单
2016/12/17 Javascript
Jquery Easyui自定义下拉框组件使用详解(21)
2020/12/31 Javascript
JS和jQuery通过this获取html标签中的属性值(实例代码)
2017/09/11 jQuery
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
在 Vue 中编写 SVG 图标组件的方法
2020/02/24 Javascript
[01:08:09]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#1Liquid VS Alliance第二局
2016/03/02 DOTA
python在linux中输出带颜色的文字的方法
2014/06/19 Python
python使用xlrd模块读写Excel文件的方法
2015/05/06 Python
Python函数式编程指南(一):函数式编程概述
2015/06/24 Python
python学习笔记之调用eval函数出现invalid syntax错误问题
2015/10/18 Python
python异常和文件处理机制详解
2016/07/19 Python
一个Python最简单的接口自动化框架
2018/01/02 Python
浅谈pycharm下找不到sqlalchemy的问题
2018/12/03 Python
基于Python检测动态物体颜色过程解析
2019/12/04 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
Python request使用方法及问题总结
2020/04/26 Python
Mistine官方海外旗舰店:泰国国民彩妆品牌
2016/12/28 全球购物
写自荐信的七个技巧
2013/10/15 职场文书
安全目标管理责任书
2014/07/25 职场文书
房地产经营管理专业自荐信
2014/09/02 职场文书
爱心募捐感谢信
2015/01/22 职场文书
社区党支部公开承诺书
2015/04/29 职场文书
农业项目投资意向书
2015/05/09 职场文书