微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

获取单击div的宽度,高度和偏移量 – Angular 2

我有一个模板,使用* ngFor和一个单独的div元素创建一个链接列表,我想根据当前活动的链接更改其位置.

模板:

<div #divHandle
    *ngFor="let link of links; let i = index"
    class="div-link"
    (click)="changeActiveLink(i)">
    <h2>{{link}}</h2>
</div>
<div
[@indexState]="activeLink"
id="Highlighter"></div>

这导致了如下结构:

<div class="div-link">
  <div (click)="changeActiveLink(0)"><h2>Link 1</h2></div>
  <div (click)="changeActiveLink(1)"><h2>Link 2</h2></div>
  <div (click)="changeActiveLink(2)"><h2>Longer link 1</h2></div>
  <div (click)="changeActiveLink(3)"><h2>Longer link 2</h2></div>
</div>
<div id="Highlighter"></div>

当activeLink = 0时,我希望我的荧光笔div获得链接1的宽度.类似于这个普通的js:

var High = document.getElementById('Highlighter');
High.style.width = document.getElementsByClass('div-link')[0].children[activeLink].offsetWidth; //activeLink = 0

在我的app.component.ts文件中:

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

@Directive({selector: '[class~=div-link]'})
@Directive({selector: '.div-link'}) // variant
@Directive({selector: '#divHandle'}) // variant
@Directive({selector: '[divHandle]'}) // variant
export class ChildDirective {
    constructor(elem: ElementRef){}
}

@Component({
    selector: 'my-app',...
})
export class AppComponent implements AfterViewInit {
    @ViewChildren(ChildDirective) childrenContent: QueryList<ChildDirective>;

    ngAfterViewInit(){
        console.log(this.childrenContent);
    }
}

当我记录childrenContent时,我得到一个QueryList对象,但它是空的,没有从中获取信息的元素.

我已经尝试了几个@Directive选择器,并且我的QueryList总是空的.

解决方法

您可以使用$event属性来处理宽度,高度,偏移等.通过使用此方法,传统的javascript发挥作用如下

HTML代码将为

<div *ngFor="let link of links;" class="div-link" 
             height="100px"
             width="30px"
             (click)="changeActiveLink($event)">
          <h2>{{link}}</h2>
</div>
<div height="height" width="width" id="Highlighter">some text</div>

将div元素从上面的div元素处理为

changeActiveLink(value){
    this.height=value.srcElement.parentElement.attributes['height'].value;
    this.width=value.srcElement.parentElement.attributes['width'].value;
    console.log(this.width);
    console.log(this.height); 
  }

注意:在上面的例子中,click事件在字母上,所以我们将srcElement作为h2,所以我使用parentElement.实时您可以使用方法中的if条件处理它.

你也可以在console.log中点击被点击的元素,并获得更多想法来实现这一目标.

LIVE DEMO

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。