表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

202/210

angularの[ngClass]や[disabled]が複雑な条件の場合に関数化してみた

これはionicでangularを使って、ゲームブックアプリを開発している連載ですが備忘録的な話です。


ionicとangularの組み合わせは本当に色々便利です。


例えば、たくさんの入力項目があって、前回の入力から変更があった場合に『保存ボタン』を有効にしたい場合、以下のように[disabled]="条件式"を使います。


<ion-button (click)="fnSaveBtn" [disabled]="A==preA">保存</ion-button>


この場合、"A"と言う双方向バインディングされた入力値と前回の入力値である"preA"を比較して同じなら保存ボタンを押せないように無効化しています。


入力項目を変えただけで有効無効が切り替わり便利ですし、画面に複数の項目があったとしても条件式(この場合は"A==preA")を追加してやれば拡張可能です。


ただ問題はhtmlは複雑な条件式を書くのに向いていないという事です。


そこで、条件式自体はtrueかfalseのいずれかになればいいので、trueあるいはfalseを返す関数を作り、条件式に関数名を書く事にしました。


home.page.ts側

------------------------------------------

fnChkDisabled(){

let rtn=false;

if(this.A==this.preA){

rtn=true;

}

return rtn;

}

------------------------------------------


home.page.html側

------------------------------------------

<ion-button (click)="fnSaveBtn" [disabled]="fnChkDisabled()">保存</ion-button>

------------------------------------------


これによりhtml側はシンプルになり、判定条件の方もコメント等も含め判りやすくなりました。


次に[ngClass]ですが、こちらは"動的に"HTML要素に対してCSS用のクラスの設定を行うための機能です。


複数のCSSクラス設定を条件(動的に判定される)により行えるので、凝ろうと思えばいくらでも凝れそうな機能ですが、html側に複雑怪奇な書き方をすると解読も修正も困難になります。


ですのでこちらも関数化しましたが、関数が返すのブーリアン値ではなく以下のようなオブジェクトであることに注意です。


home.page.ts側

------------------------------------------

fnNgClassFrame(){

const objNgClass={

css1:this.UseCss1,

css2:this.UseCss2,

css3:this.UseCss3

}

return objNgClass;

}

------------------------------------------


home.page.html側

------------------------------------------

<div id="container" [ngClass]="fnNgClassFrame()">

------------------------------------------


css1~3は、home.page.scssで定義したcssクラス、this.UseCss1~3はそれらのCSSクラスを使用するかどうかのブーリアン値です。


こちらもバインディングされたデータと連動できるかもしれませんが、そこまでは試していません。


もう一つ注意点としてはobjNgClassの最後の項目"css3:this.UseCss3"の末尾に","をつけてはいけない事です。エラーが出ますのでご注意を!


以上、備忘録でした。

評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ