2017-08-14 10 views
0

私は、選択された角度2の角度を持っています。この式は、const内の5つのプロパティの1つを評価します。クリックされたものに応じて、クラス名が変更されます。角度2 ngClassは条件をチェックするときに私の式を評価していません

    <button 
         class="button button--secondary" 
         [ngClass]="selectedState"> 
         <div class="u-maxX u-centerX"> 
          <span>Button</span> 
          </div> 
         </div> 
        </button> 

「selectedState」は、クリックされたアイテムを返します。 is-hovering、is-active、disabled、およびloadingです。

私がis-hoverをクリックすると、返されます。

    `<button 
         class="button button--secondary is-hovering"> 
         <div class="u-maxX u-centerX"> 
          <span>Button</span> 
          </div> 
         </div> 
        </button>` 

私はそういう構文を変更します。

"selectedState"は、以前のように動的でなく変更される代わりに、 "selectedState"という文字列を評価します。タイプ===「プライマリ」をチェックしているときに、どのように動的な動作を維持できますか?ページにはいくつかの種類があるので、タイプを確認する必要があります。 1つのボタンにのみ影響するように各タイプが必要です。それ以外の場合は、ページのすべてのボタンに影響します。

+0

* "" selectedState "は" * "と評価され、オブジェクトリテラルの仕組みになります!あなたはクラス内のゲッターメソッドで適切なオブジェクトを構築することを考慮しましたか?それはテンプレートですべてをやろうとするのではありませんか? – jonrsharpe

+0

最初の例では、selectedStateは1/5のオプションを評価します。例えば。デフォルト、ホバー、アクティブ、ディスエーブル、ローディング2番目の場合は、単に "selectedState"に評価されます。 – London804

+1

予想される動作の詳細については、ここで追加する必要があります。あなたは 'class =" button button - primary selectedState "' type === 'primary''のときに好きですか? –

答えて

0

[ngClass]="someVariable"をバインドし、関数を呼び出すことによってその変数を変更するか、または[ngClass]="someFunction()"をバインドして、その関数がいくつかの条件セットに基づいて適切なクラス名を返すように、テンプレートからできるだけ多くのロジックを保持する必要があります。例えば

、それらの機能を定義し、setIsHovering関数を呼び出しボタン、等setIsActive関数を呼び出す別のボタンを持っている:

setIsActive() { 
    this.selectedState = "isActive"; 
} 

setIsHovering() { 
    this.selectedState = "isHovering"; 
} 

としてngClassを定義:

[ngClass]="selectedState" 

あるいは、選択状態関数を定義:

selectedState() { 
    if(this.isHoveringStateVariable == true) { 
     this.selectedState = "isHovering"; 
    } else if (this.isActiveStateVariable == true) { 
      this.selectedState = "isActive"; 
    } 
} 

とDEFI ngClass NE:

[ngClass]="selectedState()" 

明らかに実際の現在の状態が何であるかを決定するための適切などんなロジックでthis.isHoveringStateVariableを交換してください。

+0

コメントのないダウンワードは特に役に立ちません。誰でもこの答えの問題が何であるか説明してください。 –

+0

私は投票した人ではありませんが、変更検知のサイクルごとに実行されるため、テンプレートから関数を呼び出すべきではありません。 –

+0

これはパフォーマンスの決定であり、私がリストした2つのオプションのうちの1つです。最初は変数にバインドし、ボタンやその他の状態の変化によって変化させます。私は自分のアプリケーションで両方を使用していますが、大きなアプリケーションがあります。場合によっては、各変更検出サイクルでクラスを再評価し、クラス変数を手動で変更することを心配する必要がない場合があります。たとえば、コンテナ内のネストされたnavコンポーネントナビゲーションを同期させるサービスを介してイベントやパイピングの変更をトリガするよりも速くなります。 –

関連する問題