我有几个div,如果div被点击,我想通过改变div的背景颜色以及div中的文本来高亮div即使其活跃)。在使用JQuery之前,我通过在css中定义一个类并动态删除和添加类来完成此操作。这怎么能在Angular2中完成。从研究和我不应该操纵DOM,因为这是在angular2中不是没有。我在网上查了几个例子,但没有成功。请如何突出显示div或使div被激活点击
回答
一种方法是制作属性指令。对你来说幸运的是,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>
但如果我点击另一个div,以前的div不会不高亮右 – user3497437
但如果你选择另一个div,先前的div仍然高亮显示。但是一个div必须被突出显示,而不是所有的div。 – user3497437
如果您只希望一次突出显示一个div,则可以在包含highlightable div的组件中进行突出显示,或者您可以创建一个服务,以使属性指令的所有实例(在其他情况下都是隔离的)与为了彼此协调。 – ABabin
只需设置取决于被点击了哪些项目,并设置一个类,如果值匹配当前项目的一个属性。使用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;
}
感谢您的回复,我对angular2非常陌生,但仍不知道上面做了什么。就像我上面提到的从做JQuery到试图学习angular2。在JQuery中这样做涉及到添加和删除一个类,但是在angular2中,它与它截然不同,并试图抓住这个概念。但是如何动态地添加和删除类似JQuery的类而不操作dom。 – user3497437
我只想当div被点击时突出显示让用户知道活动div。如果另一个div被点击,它会突出显示,并且以前的div不是 – user3497437
我上面的代码是动态添加/删除类“highlight”。或者你的意思是“动态”的其他内容?你也可以使用'[ngClass] =“someClass”',其中'someClass'是一个字符串或数组,并添加类。 –
- 1. 点击激活div功能
- 2. jquery如何激活div显示/隐藏
- 3. 突出显示div
- 4. 如何在点击时突出显示div
- 5. 如何使用slideToggle()突出显示div?
- 6. Maphilight - 需要它去激活突出显示新鼠标点击
- 7. 点击显示div
- 8. 当链接被点击时显示div
- 9. 任何div或span我点击总是突出显示一个gridview,为什么?
- 10. 显示或隐藏的div点击
- 11. 激活功能后显示div
- 12. 如何在editplus中突出显示关闭div,当我点击或选择一个开放div时
- 13. 如何淡出/突出显示链接点击相应的div jQuery中
- 14. 防止在Android WebView中突出显示可点击的div
- 15. 突出显示特定div点击以吸引注意力
- 16. 突出显示点击分页页面上的DIV
- 17. 点击母版页中突出显示div的背景
- 18. div的文本是突出显示多次点击
- 19. 点击DIV或A标签激活JS函数
- 20. ASP.NET按钮点击div显示div
- 21. 显示/隐藏点击纯div div
- 22. 如何激活div标记
- 23. 如何在点击时显示div?
- 24. 如何使用javascript或jquery突出div
- 25. 显示DIV后1链接和其他DIV被点击
- 26. 如何使Visual Studio窗口在激活时突出显示?
- 27. 点击显示/隐藏div
- 28. 按钮点击显示div
- 29. jquery点击显示div
- 30. 使用jquery突出显示多个div
强制性的“只使用VanillaJS”的评论。 –