2017-04-18 2 views
2

Ich möchte einen cursor:pointer css-Stil zu allen Elementen hinzufügen, die (click)-Handler definiert haben (oder binde auf Click-Ereignisse). Ich glaube, dass auf AngularJS war es möglich, eine css mit [ng-click] { ... } zu definieren, gibt es eine ähnliche Problemumgehung für Angular2/4?Alle anklickbaren Elemente in Angular2 fangen?

+1

es ein einfacher Weg, um herauszufinden: der 'Hinzufügen (klicken)' Handler, inspiziert das gerenderte Element, und sehen, ob Es gibt eindeutige Attribute im HTML. –

+0

Ich denke, es wird nicht helfen, ich überprüfe nur meine angular2 App und (Klick) erscheint nicht in DOM. Du kannst es also nicht mit einfachem CSS tun. – Leguest

Antwort

3

1) Wenn Sie ein bestimmtes Verhalten auf alle Elemente hinzuzufügen, die (click) Handler haben Sie Direktive wie erstellen:

@Directive({ 
    selector: '[click]', 
    host: { 
    'style': 'cursor: pointer' // or class 
    } 
}) 
export class ClickableDirective {} 

Plunker Example

2) fangen alle Element- Das hätte click Handler ich würde überschreiben EventManager

import { Injectable, Inject, NgZone }  from '@angular/core'; 
import { EventManager, EVENT_MANAGER_PLUGINS } from '@angular/platform-browser'; 

@Injectable() 
export class MyEventManager extends EventManager { 
    constructor(@Inject(EVENT_MANAGER_PLUGINS) plugins: any[], private zone: NgZone) { 
    super(plugins, zone); 
    } 

    addEventListener(element: HTMLElement, eventName: string, handler: Function): Function { 
    if(eventName === 'click') { 
     element.style.cursor = 'pointer'; // or add class 
    } 

    return super.addEventListener(element, eventName, handler); 
    } 
} 

app.module.ts

... 
    providers: [ 
    { provide: EventManager, useClass: MyEventManager } 
    ] 
}) 
export class AppModule { 

Plunker Example

+0

Was ist mit Leistung? Wie wirkt es sich auf große Systeme aus? – Yuvals

+0

Ich sehe kein Problem mit der Einstellung Style 'cursor: pointer', wenn der Handler zu' click' Event hinzugefügt wird. – yurzui

0

Wenn ich richtig verstanden habe, sollte das Hinzufügen [style.cursor]="'pointer'" zu dem Element den Trick tun.

Aber es könnte eine besser sein, eine ‚klickbaren‘ Klasse hinzufügen und in Ihrem Stylesheet folgenden definiert:

.clickable { cursor: pointer; }

Von dem, was ich sagen kann, Angular fügt nichts auf das Elemente des HTML beim Hinzufügen von (click).

+0

Ja, die anklickbare Klasse ist der offensichtliche Weg. Aber ich suchte nach einer Möglichkeit, alle (derzeit) anklickbaren Elemente zu erfassen, ohne das Projekt neu zu gestalten. – Yuvals