モデルデータに基づいてimg srcを条件付きで変更する
質問
Angularを使用してモデルデータを異なる画像として表現したいのですが、それを行うための"right"方法を見つけるのに苦労しています。 Angularの API ドキュメントにある式 には、条件式は許可されないと書かれています...。
かなり単純化すると、モデルデータはAJAX経由で取得され、ルータ上の各インターフェイスの状態を表示します。 みたいな感じ。
$scope.interfaces = ["UP", "DOWN", "UP", "UP", "UP", "UP", "DOWN"]
ということで、Angularでは以下のような感じで各インターフェイスの状態を表示することができます。
<ul>
<li ng-repeat=interface in interfaces>{{interface}}
</ul>
しかし - モデルからの値の代わりに、私は適切な画像を表示したいと思います。 この一般的な考えに従ったもの。
<ul>
<li ng-repeat=interface in interfaces>
{{if interface=="UP"}}
<img src='green-checkmark.png'>
{{else}}
<img src='big-black-X.png'>
{{/if}}
</ul>
(Emberはこのような構成に対応していると思います)
もちろん、実際のモデルデータに基づいて画像のURLを返すようにコントローラを修正することはできますが、それはモデルとビューの分離に違反しているように思えますね?
このSOの投稿 では、bg-imgのソースを変更するためにディレクティブを使用することを提案しました。 しかし、それでは、テンプレートではなく JS に URL を置くことに戻ってしまいます...。
すべての提案に感謝します。 ありがとうございます。
誤字脱字をお許しください。
どのように解決するのですか?
の代わりに
src
の代わりに
ng-src
.
AngularJSのビューは二項演算子をサポートしています。
condition && true || false
では、あなたの
img
タグは次のようになります。
<img ng-src="{{interface == 'UP' && 'green-checkmark.png' || 'big-black-X.png'}}"/>
注意 : ここでは引用符 (すなわち 'green-checkmark.png') が重要です。引用符がないと動きません。
ここにプランカー (生成されたHTMLを見るには開発ツールを開いてください)
関連
-
[解決済み] AngularJSのグローバル変数
-
[解決済み] AngularJSのシンプルな "Hello, world "が動作しない。
-
[解決済み] ReferenceError: Angularは定義されていません。
-
[解決済み] ディレクティブ '...' が要求するコントローラ 'ngModel' が見つかりません。
-
[解決済み] AngularJS : ローカルストレージを使用する
-
[解決済み] ngInject'を本当に書く必要があるのか?
-
[解決済み] Angular JSによるシンプルなポップアップ
-
[解決済み] AngularJSの部分的なビューに基づいて動的にヘッダーを変更するには?
-
[解決済み] 子コントローラから親スコープにアクセスするAngularJS
-
[解決済み] AngularJSでEnterキーを押したときにフォームを送信する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
angularjs ローカルデータストレージ LocalStorage
-
[解決済み] AngularJSのng-showとフェードアニメーション
-
[解決済み] md-selectでデフォルト値を設定する方法
-
[解決済み] angularjsで$compileを操作する
-
[解決済み] createspyとcreatespyobjの違いは何ですか?
-
[解決済み] AngularJS 。scope.apply()呼び出し時の$digest already in progressエラーを防ぐ。
-
[解決済み] ngInject'を本当に書く必要があるのか?
-
[解決済み] どのように$state.goにパラメータを追加しますか?
-
[解決済み] AngularJSとHandlebars - 両方必要なのかどうか
-
[解決済み] angularjs: background-image:url(...) に相当するng-src。