详解如何在angular2中获取节点
我们知道在angular2中ts文件支持js代码,为什么用document.getElementById没法获取元素节点呢?
其实在angular2中先加载ts文件,再加载view,所以获取不到节点。
在应用层直接操作DOM,就会造成应用层与渲染层之间强耦合,导致我们的应用无法运行在不同环境,如webworker中,因为在webworker环境中,是不能直接操作DOM。
通过ElementRef我们就可以封装不同平台下视图层中的native元素(在浏览器环境中,native元素通常是指DOM元素),最后借助于Angular提供的强大的依赖注入特性,我们就可以轻松地访问到native元素。
angular2有生命周期钩子AfterViewInit可以帮助我们在view加载完之后再执行相应的ts
ts:
import{Component,ElementRef,AfterViewInit}from'@angular/core';
exportclassAppComponent{
constructor(privateelementRef:ElementRef){
}
ngAfterViewInit(){
letdivEle=this.elementRef.nativeElement.querySelector('div');//获取第一个div
console.dir(divEle);
letdiv=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:
helloworld//element的标识"#name",@ViewChild根据这个搜索元素
angular中怎么获取dom元素
步骤分解:
第一步:给要获取的元素一个ng-model变量,并且绑定事件啦!
第二步:在controller中利用$event.target获取dom元素即可!
$scope.switchImage=function($event,value){
3$($event.target).on("mouseentermouseleave",function(e){
varw=$(this).width();//得到盒子宽度
varh=$(this).height();//得到盒子高度
varx=(e.pageX-this.offsetLeft-(w/2))*(w>h?(h/w):1);
//获取x值
vary=(e.pageY-this.offsetTop-(h/2))*(h>w?(w/h):1);
//获取y值
vardirection=Math.round((((Math.atan2(y,x)*(180/Math.PI))+180)/90)+3)%4;
//direction的值为“0,1,2,3”分别对应着“上,右,下,左”
//将点的坐标对应的弧度值换算成角度度数值
vardirName=newArray('上方','右侧','下方','左侧');
if(e.type=='mouseenter'&&direction==1){
$(this).find('.profil-photo').html(dirName[direction]+'离开');
}else{
$(this).find('.profil-photo').html(dirName[direction]+'离开');
}
});
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。