详解如何在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 相关文章推荐
静态的动态续篇之来点XML
Aug 15 Javascript
ExtJS TabPanel beforeremove beforeclose使用说明
Mar 31 Javascript
JavaScript去除空格的三种方法(正则/传参函数/trim)
Feb 06 Javascript
原生javascript和jquery判断浏览器版本等信息
Jul 04 Javascript
封装获取dom元素的简单实例
Jul 08 Javascript
解决wx.onMenuShareTimeline出现的问题
Aug 16 Javascript
Vue开发中整合axios的文件整理
Apr 29 Javascript
使用vue构建移动应用实战代码
Aug 02 Javascript
浅谈Vuejs Prop基本用法
Aug 17 Javascript
vue生命周期和react生命周期对比【推荐】
Sep 19 Javascript
vue将后台数据时间戳转换成日期格式
Jul 31 Javascript
JavaScript实现拖拽和缩放效果
Aug 24 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/10/09 PHP
PHP使用静态方法的几个注意事项
2014/09/16 PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
2017/10/26 PHP
php之header的不同用法总结(实例讲解)
2017/11/28 PHP
JavaScript XML和string相互转化实现代码
2011/07/04 Javascript
jquery $.getJSON()跨域请求
2011/12/21 Javascript
两个listbox实现选项的添加删除和搜索
2013/03/01 Javascript
jquery实现的图片点击滚动效果
2014/04/29 Javascript
js实现非常简单的焦点图切换特效实例
2015/05/07 Javascript
很酷的星级评分系统原生JS实现
2016/08/25 Javascript
js实现的简练高效拖拽功能示例
2016/12/21 Javascript
JS实现页面中所有img对象添加onclick事件及新窗口查看图片的方法
2016/12/27 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
vue 通过下拉框组件学习vue中的父子通讯
2017/12/19 Javascript
JavaScript作用域链实例详解
2019/01/21 Javascript
layer扩展打开/关闭动画的方法
2019/09/23 Javascript
D3.js 实现带伸缩时间轴拓扑图的示例代码
2020/01/20 Javascript
[01:19:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第二局
2016/03/05 DOTA
详解Django中的form库的使用
2015/07/18 Python
Python复制文件操作实例详解
2015/11/10 Python
利用python编写一个图片主色转换的脚本
2017/12/07 Python
Django 源码WSGI剖析过程详解
2019/08/05 Python
python遍历文件目录、批量处理同类文件
2019/08/31 Python
pycharm无法导入本地模块的解决方式
2020/02/12 Python
virtualenv介绍及简明教程
2020/06/23 Python
使用PyCharm官方中文语言包汉化PyCharm
2020/11/18 Python
HTML5新增加的功能详解
2016/09/05 HTML / CSS
戴森比利时官方网站:Dyson BE
2020/10/03 全球购物
Java servlet面试题
2012/03/04 面试题
办公室前台岗位职责
2014/01/04 职场文书
机械制造专业毕业生求职信
2014/03/02 职场文书
大专学生求职信
2014/07/04 职场文书
个人授权委托书模板
2014/09/14 职场文书
公司的力量观后感
2015/06/05 职场文书
创业计划书之养殖业
2019/10/11 职场文书
MySQL窗口函数的具体使用
2021/11/17 MySQL