详解如何在angular2中获取节点


Posted in Javascript onNovember 23, 2017

我们知道在angular2中ts文件支持js代码,为什么用document.getElementById没法获取元素节点呢?

其实在angular2中先加载ts文件,再加载view,所以获取不到节点。

在应用层直接操作 DOM,就会造成应用层与渲染层之间强耦合,导致我们的应用无法运行在不同环境,如 web worker 中,因为在 web worker 环境中,是不能直接操作 DOM。

通过 ElementRef 我们就可以封装不同平台下视图层中的 native 元素 (在浏览器环境中,native 元素通常是指 DOM 元素),最后借助于 Angular 提供的强大的依赖注入特性,我们就可以轻松地访问到 native 元素。

angular2有生命周期钩子AfterViewInit可以帮助我们在view加载完之后再执行相应的ts

ts:

import { Component, ElementRef ,AfterViewInit} from '@angular/core';

exportclassAppComponent { 

constructor(privateelementRef: ElementRef) {

 }

ngAfterViewInit() {

  let divEle =this.elementRef.nativeElement.querySelector('div');//获取第一个div

  console.dir(divEle);

  let div = doxcument.getElementById("div");  //获取id为‘div'的节点

}

}

下面有一种优化方案,运用angular内置属性装饰器@ViewChild

ts:

import{ Component, ElementRef, ViewChild, AfterViewInit }from'@angular/core';

exportclassAppComponent{

@ViewChild('greet')

 greetDiv: ElementRef;

ngAfterViewInit() {this.greetDiv.nativeElement.style.backgroundColor ='red'; }

}

html:

<div #greet>hello world</div>  //element的标识"#name",@ViewChild根据这个搜索元素

angular中怎么获取dom元素

步骤分解:

第一步:给要获取的元素一个ng-model变量,并且绑定事件啦!

<div class="home" ng-model="dirName"  ng-mouseenter="switchImage($event,dirName)"></div>  //给要获取的元素一个ng-model变量

第二步:在controller中利用$event.target获取dom元素即可!

$scope.switchImage = function($event, value) { 
      3       $($event.target).on("mouseenter mouseleave",function(e) {
         var w = $(this).width(); // 得到盒子宽度
         var h = $(this).height();// 得到盒子高度
         var x = (e.pageX - this.offsetLeft - (w / 2)) * (w > h ? (h / w) : 1);
         // 获取x值
         var y = (e.pageY - this.offsetTop - (h / 2)) * (h > w ? (w / h) : 1);
         // 获取y值
         var direction = Math.round((((Math.atan2(y, x) * (180 / Math.PI)) + 180) / 90) + 3) % 4; 





//direction的值为“0,1,2,3”分别对应着“上,右,下,左”
         // 将点的坐标对应的弧度值换算成角度度数值
         var dirName = new Array('上方','右侧','下方','左侧');
         if(e.type == 'mouseenter' && direction == 1){
           $(this).find('.profil-photo').html(dirName[direction]+'离开');







}else{ 
 





 $(this).find('.profil-photo').html(dirName[direction]+'离开'); 





} 




}); 



}

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

Javascript 相关文章推荐
Expandable &quot;Detail&quot; Table Rows
Aug 29 Javascript
JQUERY操作JSON实例代码
Feb 09 Javascript
基于jquery+thickbox仿校内登录注册框
Jun 07 Javascript
javascript删除字符串最后一个字符
Jan 14 Javascript
javascript中this关键字详解
Dec 12 Javascript
关于使用js算总价的问题
Jun 23 Javascript
详解如何构建Angular项目目录结构
Jul 13 Javascript
解决node-sass偶尔安装失败的方法小结
Dec 05 Javascript
Vue 报错TypeError: this.$set is not a function 的解决方法
Dec 17 Javascript
图文讲解用vue-cli脚手架创建vue项目步骤
Feb 12 Javascript
Javascript三种字符串连接方式及性能比较
May 28 Javascript
基于javascript实现移动端轮播图效果
Dec 21 Javascript
Vuejs中使用markdown服务器端渲染的示例
Nov 22 #Javascript
浅谈Vue-cli 命令行工具分析
Nov 22 #Javascript
JavaScript数据结构与算法之队列原理与用法实例详解
Nov 22 #Javascript
深入理解Vue官方文档梳理之全局API
Nov 22 #Javascript
初识 Vue.js 中的 *.Vue文件
Nov 22 #Javascript
chorme 浏览器记住密码后input黄色背景处理方法(两种)
Nov 22 #Javascript
基于JavaScript实现表格滚动分页
Nov 22 #Javascript
You might like
PHP常用代码
2006/11/23 PHP
PHP实现定时执行任务的方法
2014/10/05 PHP
值得分享的php+ajax实时聊天室
2016/07/20 PHP
php监测数据是否成功插入到Mysql数据库的方法
2016/11/25 PHP
前淘宝前端开发工程师阿当的PPT中有JS技术理念问题
2010/01/15 Javascript
!DOCTYPE声明对JavaScript的影响分析
2010/04/12 Javascript
JS 类型转换常见方法小结
2010/05/31 Javascript
js前台判断开始时间是否小于结束时间
2012/02/23 Javascript
解决jquery异步按一定的时间间隔刷新问题
2012/12/10 Javascript
百度多文件异步上传控件webuploader基本用法解析
2016/11/07 Javascript
JavaScript中this的用法实例分析
2016/12/19 Javascript
jquery Form轻松实现文件上传
2017/05/24 jQuery
Vue路由跳转问题记录详解
2017/06/15 Javascript
微信小程序开发之animation循环动画实现的让云朵飘效果
2017/07/14 Javascript
推荐VSCode 上特别好用的 Vue 插件之vetur
2017/09/14 Javascript
jQuery实现动态显示select下拉列表数据的方法
2018/02/05 jQuery
解决vue 按钮多次点击重复提交数据问题
2018/05/10 Javascript
简述JS浏览器的三种弹窗
2018/07/15 Javascript
ES6 中可以提升幸福度的小功能
2018/08/06 Javascript
原生JS实现的简单轮播图功能【适合新手】
2018/08/17 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
2019/07/11 Javascript
微信小程序之几种常见的弹框提示信息实现详解
2019/07/11 Javascript
[03:40]DOTA2抗疫特别篇《英雄年代》
2020/02/28 DOTA
[54:43]DOTA2-DPC中国联赛 正赛 CDEC vs Dynasty BO3 第一场 2月22日
2021/03/11 DOTA
Python中函数的参数传递与可变长参数介绍
2015/06/30 Python
Python的语言类型(详解)
2017/06/24 Python
python编程嵌套函数实例代码
2018/02/11 Python
django admin后台添加导出excel功能示例代码
2019/05/15 Python
美国最大的高尔夫发球时间预订网站:TeeOff.com
2018/03/28 全球购物
NBA欧洲商店(英国):NBA Europe Store UK
2018/07/27 全球购物
计算机网络专业个人的自我评价
2013/10/17 职场文书
团支书的期末学习总结自我评价
2013/11/01 职场文书
中介公司区域经理岗位职责范本
2014/03/02 职场文书
伊索寓言教学反思
2014/05/01 职场文书
幼师个人总结范文
2015/02/28 职场文书
Python基础之进程详解
2021/05/21 Python