2016-08-17 44 views
0

我有几个div,如果div被点击,我想通过改变div的背景颜色以及div中的文本来高亮div即使其活跃)。在使用JQuery之前,我通过在css中定义一个类并动态删除和添加类来完成此操作。这怎么能在Angular2中完成。从研究和我不应该操纵DOM,因为这是在angular2中不是没有。我在网上查了几个例子,但没有成功。请如何突出显示div或使div被激活点击

+0

强制性的“只使用VanillaJS”的评论。 –

回答

0

一种方法是制作属性指令。对你来说幸运的是,Angular拥有a guide几乎完全符合你的需求,但却带有悬停事件。为了应对点击相反,对于 '响应用户操作' 部分...

...替换此:

@HostListener('mouseenter') onMouseEnter() { 
    /* . . . */ 
} 
@HostListener('mouseleave') onMouseLeave() { 
    /* . . . */ 
} 

与此:

@HostListener('click') onMouseClick() { 
    /* . . . */ 
} 

要acheive结果,其中点击一个已经突出显示的div将不会引起注意,完整的指令代码将为:

import { Directive, ElementRef, HostListener, Input } from '@angular/core'; 

@Directive({ 
    selector: '[myHighlight]' 
}) 
export class HighlightDirective { 
    private _defaultColor = 'red'; 
    private el: HTMLElement; 
    private highlighted: boolean = false; 

    constructor(el: ElementRef) { this.el = el.nativeElement; } 

    @Input('myHighlight') highlightColor: string; 

    @HostListener('click') onMouseClick() { 
    this.highlighted ? this.highlight('') : this.highlight(this.highlightColor || this._defaultColor); 
    } 

    private highlight(color: string) { 
    this.el.style.backgroundColor = color; 
    } 
} 

对于您SE的指令,将它应用到一个元素,像这样:

<!-- With default color --> 
<div [myHighlight]>Click to highlight me!</div> 
<!-- With custom color --> 
<div [myHighlight]="yellow">I'm a div, la di da.</div> 
+0

但如果我点击另一个div,以前的div不会不高亮右 – user3497437

+0

但如果你选择另一个div,先前的div仍然高亮显示。但是一个div必须被突出显示,而不是所有的div。 – user3497437

+0

如果您只希望一次突出显示一个div,则可以在包含highlightable div的组件中进行突出显示,或者您可以创建一个服务,以使属性指令的所有实例(在其他情况下都是隔离的)与为了彼此协调。 – ABabin

0

只需设置取决于被点击了哪些项目,并设置一个类,如果值匹配当前项目的一个属性。使用CSS应用样式:

@Component({ 
    styles: [` 
    div.highlight { 
     background-color: red; 
    }` 
    ], 
    template: ` 
    <div (click)="highlighted = 1" [class.highlight]="highlighted === 1">div1</div> 
    <div (click)="highlighted = 2" [class.highlight]="highlighted === 2">div2</div> 
    <div (click)="highlighted = 3" [class.highlight]="highlighted === 3">div3</div> 
` 
}) 
class MyComponent { 
    hightlighted:number = 0; 
} 
+0

感谢您的回复,我对angular2非常陌生,但仍不知道上面做了什么。就像我上面提到的从做JQuery到试图学习angular2。在JQuery中这样做涉及到添加和删除一个类,但是在angular2中,它与它截然不同,并试图抓住这个概念。但是如何动态地添加和删除类似JQuery的类而不操作dom。 – user3497437

+0

我只想当div被点击时突出显示让用户知道活动div。如果另一个div被点击,它会突出显示,并且以前的div不是 – user3497437

+0

我上面的代码是动态添加/删除类“highlight”。或者你的意思是“动态”的其他内容?你也可以使用'[ngClass] =“someClass”',其中'someClass'是一个字符串或数组,并添加类。 –