2016-08-17 18 views
0

私は複数のdivを持ち、divをクリックするとdivの背景色とdivのテキストを変更してdivを強調表示したいすなわちそれをアクティブにする)。私はこれをJQueryを使用する前に私のCSSでクラスを定義し、クラスを動的に削除して追加しました。これはどのようにAngular2で達成できますか?私はDOMを操作するべきではありません。これはangular2のnoです。私はいくつかの例をオンラインで見てきましたが、成功しませんでした。 Pleasedivをハイライト表示するか、クリックしたときに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は強調表示されたままです。しかし、1つのdivは、すべてのdivで強調表示される必要はありません。 – user3497437

+0

一度に1つのdivだけをハイライト表示させたい場合は、ハイライト可能な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では非常に異なっており、概念を把握しようとしています。しかし、どうやってDOMを操作せずにJQueryのようなクラスを動的に追加したり削除したりするのでしょうか? – user3497437

+0

私はちょうどdivがクリックされたときにそれが強調表示され、ユーザーにアクティブなdivが分かるようにしたい。別のdivがクリックされている場合、それは強調表示されており、前のdivは – user3497437

+0

ではありません。上記のコードは、クラス 'highlight'を動的に追加/削除しています。あるいは「動的に」何か他のことを意味していますか? '[ngClass] =" someClass "' 'someClass'は追加するクラスを持つ文字列または配列です。 –

関連する問題