2016-12-17 9 views
2

私はAngularJSが初めてです。私はすべての画像の背景としてスピナーを入れようとしています。いくつかの画像があるので、tsファイルの中に単一の変数isLoadedを使用することはできません。AngularJS 2 TSファイル内のDOM要素にアクセスするには?

私はテンプレートでこれを使用します。

<img src="{{document.thumbUrl}}" class="spinner" (load)="loaded()" /> 

次に機能loaded()でTSファイル内で、どのように私はイベントをトリガした要素にアクセスすることができますか?そして、そのイベントを引き起こした特定の要素のクラスspinnerを削除するにはどうしたらいいですか?次のように私はそれをやったのディレクティブを学習した後

<img #image src="{{document.thumbUrl}}" [class.spinner]="!image.loaded" (load)="image.loaded='true'" /> 
+0

この質問はAngular.jsまたはAngular2についてですか? TypeScriptについて言及している以外は、Angular.jsでは一般的に使用されていません。 – Claies

+1

@Claies、私はあなたが故意にばかげていると思います。これがAngular 2であることは明らかです。Angular toはAngularJS2です。 – Milad

+0

Angular.jsとAngular 2は**全く異なるフレームワーク**です。あなたは両方にタグを付けましたが、明らかに質問は両方に適用されません。 – Claies

答えて

2
<img src="{{document.thumbUrl}}" class="spinner" (load)="loaded($event)" /> 

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

@Directive({selector: '[myLoading]'}) 
export class ImageLoadingDirective 
{ 
    constructor(private el: ElementRef, 
       private renderer: Renderer) 
    { 
    } 

    @HostListener('load') onLoad() 
    { 
     this.renderer.setElementClass(this.el.nativeElement, 'loading', false); 
    } 

    @HostListener('error') onError() 
    { 
     this.renderer.setElementClass(this.el.nativeElement, 'errLoading', false); 
    } 
} 

次に、あなただけの追加属性としてmyLoadingどんなイメージにも。もちろん、loadingクラスとerrorクラスをCSSで定義し、この宣言子をモジュール宣言セクションに追加する必要があります。

申し訳ありませんが、この「フレームワーク」はさまざまな面で魅力的です。型付き言語やリアクティブプログラミング以外に、私はこれにメリットはありません。

PS。私が理解できなかったことは、関数名onLoadonErrorが恣意的であると思われることです。私はそれらをどこにでも呼びませんでした。私はそれらの名前を選ぶことができますが、それでも動作します。ポイントが何であるか分かりません。

1

constructor(private renderer:Renderer){ 


} 

loaded($event){ 

    console.log($event.target); // is the img 
    this.renderer.setElementClass($event.target, '', false); 
} 

そしておそらく少し賢く、あなたのクラスの内部

+0

名前は実際には任意です。 Angular2はまた、コンポーネント指向プログラミングの全体的なポイントであるはずの再利用可能なチャンクにコードをリファクタリングするのは本当に辛いことです。タイプされた言語に関して、角度のTypeScriptの優れた機能の使用は非常に貧弱です。彼らは実行時の構造体のような型を扱う傾向があります。これは実行時の型ではなく値のままで、ほとんどのAPIが 'any'を受け取って返すので、クラスに対してのみ機能します。つまり、あなたの欲求不満は正当だと思います。 –

関連する問題