在新的Angular2框架中,有人知道像事件一样执行悬停的正确方法吗?
在Angular1中有ng-Mouseover,但这似乎没有被保留下来。
ng-Mouseover
我看了所有的文件,什么都没发现。
是的,angar2中有on-mouseover,而不是像angular 1中的ng-Mouseover。所以你必须这样写:-
on-mouseover
<div on-mouseover='over()' style="height:100px; width:100px; background:#e2e2e2">hello mouseover</div> over(){ console.log("Mouseover called"); }
正如@Gunter在评论中建议的那样,我们也可以使用on-mouseover。有些人更喜欢带前缀的替代形式,称为规范形式。
HTML代码-
<div (mouseover)='over()' (mouseout)='out()' style="height:100px; width:100px; background:#e2e2e2">hello mouseover</div>
控制器/。TS代码-
import { Component } from '@angular/core'; @Component({ selector: 'my-app', templateUrl: './app.component.html', styleUrls: [ './app.component.css' ] }) export class AppComponent { name = 'Angular'; over(){ console.log("Mouseover called"); } out(){ console.log("Mouseout called"); } }
工作示例
其他一些鼠标事件也可以在Angular中使用
(mouseenter)="myMethod()" (mousedown)="myMethod()" (mouseup)="myMethod()"
你可以用一个主机:
import { Directive, ElementRef, Input } from '@angular/core'; @Directive({ selector: '[myHighlight]', host: { '(mouseenter)': 'onMouseEnter()', '(mouseleave)': 'onMouseLeave()' } }) export class HighlightDirective { private _defaultColor = 'blue'; private el: HTMLElement; constructor(el: ElementRef) { this.el = el.nativeElement; } @Input('myHighlight') highlightColor: string; onMouseEnter() { this.highlight(this.highlightColor || this._defaultColor); } onMouseLeave() { this.highlight(null); } private highlight(color:string) { this.el.style.backgroundColor = color; } }
只是调整它到你的代码(找到:https://angular.io/docs/ts/latest/guide/attribute-directives.html)
如果您想在任何HTML元素上执行类似悬停的事件,那么您可以这样做。
超文本标记语言
<div (mouseenter) ="mouseEnter('div a') " (mouseleave) ="mouseLeave('div A')"> <h2>Div A</h2> </div> <div (mouseenter) ="mouseEnter('div b')" (mouseleave) ="mouseLeave('div B')"> <h2>Div B</h2> </div>
组件
import { Component } from '@angular/core'; @Component({ moduleId: module.id, selector: 'basic-detail', templateUrl: 'basic.component.html', }) export class BasicComponent{ mouseEnter(div : string){ console.log("mouse enter : " + div); } mouseLeave(div : string){ console.log('mouse leave :' + div); } }
为了在angular 2中完全实现功能性悬停事件,你应该同时使用mouseenter和mouseleave事件。
mouseenter
mouseleave
对于处理overing事件,您可以尝试这样做 (它适用于我):
在Html模板中:
<div (mouseenter)="onHovering($event)" (mouseleave)="onUnovering($event)"> <img src="../../../contents/ctm-icons/alarm.svg" class="centering-me" alt="Alerts" /> </div>
在角分量中:
onHovering(eventObject) { console.log("AlertsBtnComponent.onHovering:"); var regExp = new RegExp(".svg" + "$"); var srcObj = eventObject.target.offsetParent.children["0"]; if (srcObj.tagName == "IMG") { srcObj.setAttribute("src", srcObj.getAttribute("src").replace(regExp, "_h.svg")); } } onUnovering(eventObject) { console.log("AlertsBtnComponent.onUnovering:"); var regExp = new RegExp("_h.svg" + "$"); var srcObj = eventObject.target.offsetParent.children["0"]; if (srcObj.tagName == "IMG") { srcObj.setAttribute("src", srcObj.getAttribute("src").replace(regExp, ".svg")); } }
@Component({ selector: 'drag-drop', template: ` <h1>Drag 'n Drop</h1> <div #container class="container" (mousemove)="onMouseMove( container)"> <div #draggable class="draggable" (mousedown)="onMouseButton( container)" (mouseup)="onMouseButton( container)"> </div> </div>`, })
< a href = " http://lishman。Io /angular-2-event-binding" rel="nofollow noreferrer">http://lishman.io/angular-2-event-binding
在你的js/ts文件的html将被盘旋
@Output() elemHovered: EventEmitter<any> = new EventEmitter<any>(); onHoverEnter(): void { this.elemHovered.emit([`The button was entered!`,this.event]); } onHoverLeave(): void { this.elemHovered.emit([`The button was left!`,this.event]) }
在你的HTML中
(mouseenter) = "onHoverEnter()" (mouseleave)="onHoverLeave()"
在你的js/ts文件中,将接收到悬停的信息
elemHoveredCatch(d): void { console.log(d) }
在与捕获js/ts文件连接的HTML元素中
(elemHovered) = "elemHoveredCatch($event)"
如果你对鼠标进入或离开某个组件感兴趣,你可以使用@HostListener装饰器:
@HostListener
import { Component, HostListener, OnInit } from '@angular/core'; @Component({ selector: 'my-component', templateUrl: './my-component.html', styleUrls: ['./my-component.scss'] }) export class MyComponent implements OnInit { @HostListener('mouseenter') onMouseEnter() { this.highlight('yellow'); } @HostListener('mouseleave') onMouseLeave() { this.highlight(null); } ... }
正如在@Brandon评论OP (https://angular.io/docs/ts/latest/guide/attribute-directives.html)中的链接中所解释的那样
简单地在Angular2+中执行(mouseenter)属性…
(mouseenter)
在你的HTML中:
<div (mouseenter)="mouseHover($event)">Hover!</div>
在你的组件中:
import { Component, OnInit } from '@angular/core'; @Component({ selector: 'component', templateUrl: './component.html', styleUrls: ['./component.scss'] }) export class MyComponent implements OnInit { mouseHover(e) { console.log('hovered', e); } }
如果鼠标在整个组件上是你的选项,你可以直接是@hostListener来处理事件来执行鼠标在下面的al。
@hostListener
import {HostListener} from '@angular/core'; @HostListener('mouseenter') onMouseEnter() { this.hover = true; this.elementRef.nativeElement.addClass = 'edit'; } @HostListener('mouseleave') onMouseLeave() { this.hover = false; this.elementRef.nativeElement.addClass = 'un-edit'; }
它在@angular/core中可用。我在angular 4.x.x中测试了它
@angular/core
4.x.x
如果你只是寻找一个悬停效果,使用Hover.css。
Hover.css
npm i hover.css
angular.json
projects.architect.build.options.styles
node_modules/hover.css/scss/hover.scss
在你想要效果的元素上使用它们的任何类,即:
<div *ngFor="let source of sources"> <div class="row justify-content-center"> <div class="col-12 hvr-glow"> <!-- My content --> </div> </div> </div>