angularの値に応じて、クラスを追加するための適切な構文を見つけようとします。 OR演算子。
行は次のとおりです。
<a href="" ng-click="addFavorite(myfav.id);favorite=!favorite">
<i class="fa orange" ng-class="{'fa-star': (favorite || (fav==myfav.id)), 'fa-star-o': !favorite}"></i>
</a>
私はこのようないくつかの異なるコードを試しました:
ng-class="{'fa-star': favorite, 'fa-star': (fav==myfav.id), 'fa-star-o': !favorite}"
成功せずに。誰かが良い構文を見つけるのを手伝ってくれますか?
これを試して。
<a href="" ng-click="addFavorite(myfav.id);favorite=!favorite">
<i class="fa orange" ng-class="{'fa-star': favorite || fav==myfav.id, 'fa-star-o': !favorite}"></i>
ブラケットは必要ありません。
ng-class
の背後にいくつかのロジックを追加する必要がある場合は、コントローラーを使用してそれを行うことを常にお勧めします。 JSON構文(HTMLと同じ、より読みやすい)または明らかにJavaScriptの2つの方法のいずれかで実行できます。
[〜#〜] html [〜#〜]
<i ng-class="getFavClassIcon(myFav.id)"></i>
[〜#〜] js [〜#〜]
$scope.getFavClassIcon= function (favId) {
return {
'fa-star-o' : !$scope.favorite,
'fa-star' : $scope.favorite || $scope.fav === favId
};
};
[〜#〜] html [〜#〜]
<i ng-class="getFavClassIcon(myFav.id)"></i>
[〜#〜] js [〜#〜]
$scope.getFavClassIcon= function (favId) {
if (!$scope.favorite) {
return 'fa-star-o';
} else if ($scope.favorite) { // obviously you can use OR operator here
return 'fa-star';
} else if ($scope.fav === favId) {
return 'fa-star';
}
};
HTMLは同じままです
<a href="" ng-click="addFavorite(myfav.id);favorite=!favorite">
<i ng-class="{'fa-star-o':!favorite,'fa-star':favorite||fav===myfav.id}"></i>
</a>
ただし、CSSファイルにクラスが存在する順序は重要です
fa-star
クラスは、favorite
がtrueの場合、またはfav===myfav.id
がtrueを返す場合に適用されます。
したがって、1回クリックした後、fav===myfav.id
がtrueを返し、再度クリックした場合でもtrueを返し続ける場合、fa-star
クラスはそれ以降常に適用されます。
デフォルトでfavorite
がfalseの場合、fa-star-o
はテンプレートが最初にロードされるときに適用されますが、最初のクリックの後、favorite
がtrueに設定されると取得されます削除されました。次に、2回目のクリックでfavorite
が再びfalseに設定されると、fa-star-o
が適用されますが、この場合、fa-star
クラスもfa===myfav.id
条件として適用されますまだtrueを返している(そうであると仮定して)。
したがって、要素に両方のクラスが同時に存在できる場合に発生する可能性があるため、要素に存在するときに確実に適用する必要があるクラスを優先する必要があります。たとえば、fa-star-o
クラスの優先度が高い場合、CSSのfa-star
の下に配置します(例:
.fa-star {
border: 1px solid #F00;
}
.fa-star-o {
border: 1px solid #000;
}
http://plnkr.co/edit/Dh59KUU41uWpIkHIaYrO?p=preview の作業デモを参照してください
Ng-classで式を使用できます
<i class="fa orange" ng-class="favorite || fav == myfav.id ? 'fav' : 'no-fav'"></i>