Art*_*rth 22 properties typescript angular
我很好奇,如果我可以从组件模板获取元素属性.所以我用class制作了简单的div,并且我已经创建了这个类:
export class viewApp{
elementView: any;
viewHeight: number;
myDOM: Object;
constructor() {
this.myDOM = new BrowserDomAdapter();
}
clickMe(){
this.elementView = this.myDOM.query('div.view-main-screen');
this.viewHeight = this.myDOM.getStyle(this.elementView, 'height');
}
}
Run Code Online (Sandbox Code Playgroud)
getStyle(),query()来自BrowserDomAdapter.我的问题是当我试图获得它的高度时null,但当我设置一些高度setStyle()然后我得到它getStyle()它返回适当的值.在浏览器中检查DOM和样式后,我发现这是因为有两个CSS元素.一个是:.view-main-screen[_ngcontent-aer-1]{}第二个是element{}.
.view-main-screen有一些样式,但元素是空的.当我添加样式时,setStyle()它出现在element{}.这是为什么?如何使用Angular2获取元素属性?
Jon*_*ull 49
正确的方法是使用@ViewChild()装饰器:
https://angular.io/docs/ts/latest/api/core/index/ViewChild-decorator.html
模板:
<div class="view-main-screen" #mainScreen></div>
Run Code Online (Sandbox Code Playgroud)
零件:
import { ElementRef, ViewChild } from '@angular/core';
export class viewApp{
@ViewChild('mainScreen') elementView: ElementRef;
viewHeight: number;
constructor() {
}
clickMe(){
this.viewHeight = this.elementView.nativeElement.offsetHeight;
}
}
Run Code Online (Sandbox Code Playgroud)
应该这样做,但显然你需要添加你的组件装饰器.
Gün*_*uer 15
UPDATE2
constructor(private elementRef:ElementRef) {}
someMethod() {
console.log(this.elementRef.nativeElement.offsetHeight);
}
Run Code Online (Sandbox Code Playgroud)
nativeElement不鼓励直接访问,但据我所知,目前的Angular并没有提供其他方法.
更新
https://github.com/angular/angular/pull/8452#issuecomment-220460761
mhevery在12天前发表评论我们决定删除Ruler服务,因此它不属于公共API.
原版的
据我所知,Ruler该类应该提供该功能
https://github.com/angular/angular/blob/master/modules/angular2/src/platform/browser/ruler.ts如果这不是你想要的,你可能需要访问elementRef.nativeElement和使用直接DOM访问和元素提供的功能.
new Ruler(DOM).measure(this.elRef).then((rect: any) => {
});
Run Code Online (Sandbox Code Playgroud)
规则服务在WebWorker中是安全的.另见https://github.com/angular/angular/issues/6515#issuecomment-173353649上的评论
| 归档时间: |
|
| 查看次数: |
74084 次 |
| 最近记录: |