Ng sınıfı kullanarak AngularJS geçiş sınıfı


217

Kullanarak bir öğenin sınıf geçiş yapmaya çalışıyorum ng-class

<button class="btn">
  <i ng-class="{(isAutoScroll()) ? 'icon-autoscroll' : 'icon-autoscroll-disabled'}"></i>
</button>

isAutoScroll ():

$scope.isAutoScroll = function()
{
    $scope.autoScroll = ($scope.autoScroll) ? false : true;
    return $scope.autoScroll;
}

Temel olarak, eğer $scope.autoScrolldoğruysa, ng sınıfı olmasını istiyorum icon-autoscrollve eğer yanlışsa, olmasını istiyorumicon-autoscroll-disabled

Şu an sahip olduğum şey çalışmıyor ve bu hatayı konsolda üretiyor

Error: Lexer Error: Unexpected next character at columns 18-18 [?] in expression [{(isAutoScroll()) ? 'icon-autoscroll' : 'icon-autoscroll-disabled'}].

Bunu nasıl doğru bir şekilde yapabilirim?

DÜZENLE

çözüm 1: (modası geçmiş)

<button class="btn" ng-click="autoScroll = !autoScroll">
  <i ng-class="{'icon-autoscroll': autoScroll, 'icon-autoscroll-disabled': !autoScroll}"></i>
</button>

DÜZENLEME 2

çözüm 2:

Solution 3Stewie tarafından sağlanan çözümün kullanılması gerektiği gibi çözümü güncellemek istedim . Üçlü operatör söz konusu olduğunda (ve benim için en kolayı) en standart olanıdır. Çözüm

<button class="btn" ng-click="autoScroll = !autoScroll">
  <i ng-class="autoScroll ? 'icon-autoscroll' : 'icon-autoscroll-disabled'"></i>
</button>

Çevirir:

if (autoScroll == true) ?// sınıfı kullan 'icon-autoscroll' :// başka kullan'icon-autoscroll-disabled'


angular expressionsdocs başına koşul kullanamaz => Kontrol Akış İfadeleri Yok: açısal ifadede aşağıdakilerden hiçbirini yapamazsınız: koşullu, döngüler veya fırlatma. Başka bir işlev veya yönerge kullanın
charlietfl 13:13

@ Ronnie Çözümünü gördüm ve çok güzeldi. ama merak ediyorum autoScrollburada neden her bir düğme için geçerli olacak? (Bunu çoklu düğmelerle test ettim ve çok iyi çalışıyor) Yani, her düğmeyi tıkladığımda, tüm düğmeler yerine sadece bu düğmeyi etkiliyor.
zx1986

Yanıtlar:


436

Ng-class'da koşullu nasıl kullanılır:

Çözüm 1:

<i ng-class="{'icon-autoscroll': autoScroll, 'icon-autoscroll-disabled': !autoScroll}"></i>

Çözüm 2:

<i ng-class="{true: 'icon-autoscroll', false: 'icon-autoscroll-disabled'}[autoScroll]"></i>

Çözüm 3 (açısal v.1.1.4 + üçlü operatör için destek sağladı):

<i ng-class="autoScroll ? 'icon-autoscroll' : 'icon-autoscroll-disabled'"></i>

Plunker


3
İkinci örnek daha temiz, ancak değerlendirdiğiniz değişkeni ifadenin önüne koyamayacağınız saçma ... sadece komik okuyor. İfadeye bir if ifadesi olarak bakmayı düşünün: "if (değişken) true: bunu yapın, yanlış: şunu yapın ... ugh #fullynerdy
mattdlockyer

10
@Stewie Faaakin muhteşem dostum, gerçek kod gibi görünüyor ve bazı piç ifadesi biçimlendirme değil seviyorum: D
mattdlockyer

Aslında değeri ilk olarak değerlendirmek, değişkene yanlışlıkla yeni bir değer atamaktan kaçınmak için oldukça faydalıdır.
lharby

Üçlü tam da aradığım şeydi. Sürüm desteği ayrıntıları ile üç örnek sağlayan iyi iş.
TaeKwonJoe

13

Alternatif bir çözüm olarak, son değerlendirmeyi döndüren javascript mantık operatörü '&&' temel alınarak, bunu şu şekilde de yapabilirsiniz:

<i ng-class="autoScroll && 'icon-autoscroll' || !autoScroll && 'icon-autoscroll-disabled'"></i>

Sadece biraz daha kısa bir sözdizimi, ama benim için daha kolay okunabilir.


10

Duruma göre birden fazla sınıf ekleyin:

<div ng-click="AbrirPopUp(s)" 
ng-class="{'class1 class2 class3':!isNew, 
           'class1 class4': isNew}">{{ isNew }}</div>

Uygula: isNew = false olduğunda class1 + class2 + class3 ,

Uygula: isNew = true olduğunda class1 + class4


6
<div data-ng-init="featureClass=false" 
     data-ng-click="featureClass=!featureClass" 
     data-ng-class="{'active': featureClass}">
    Click me to toggle my class!
</div>

JQuery'nin toggleClassyöntemine benzer şekilde , bu activeöğe tıklandığında sınıfı açıp kapatmak için bir yoldur .


2
Cevabınız hakkında İngilizce olarak daha fazla bilgi verebilir misiniz? Zaten burada olan cevaplardan farkı nedir?
Onots

2
Bu cevabın neden birçok olumsuz oyu olduğundan emin değilim ?? Bu benim için yukarıdaki diğerlerinden daha iyi çalışan bir çözüm ...
Paulo Griiettner

2
Ben açıklama kötü yazılmış ve insanlar "jQuery" kelimesine tepki düşünüyorum. Açıklama ne demek "Bu JQuery toggleClass işlevine analog" demek. BTW, değişkeni başlatmanız mı gerekiyor?
Tasarım Adrian

1

otomatik kaydırma denetleyicide tanımlanacak ve değiştirilecektir.

<span ng-class= "autoscroll?'class_if_true':'class_if_false'"></span>

Koşula bağlı olarak birden fazla sınıf ekleyin:

<span ng-class= "autoscroll?'first second third':'classes_if_false'"></span>


-1

Bu işi şu şekilde yaptım:

<button class="btn" ng-click='toggleClass($event)'>button one</button>
<button class="btn" ng-click='toggleClass($event)' >button two</button>

// kumandanızda

 $scope.toggleClass = function (event){
        $(event.target).toggleClass('active');
    }

2
Bu işe yararken, açısal ve jQuery karıştırıyorsunuz. Mümkünse bundan kaçınmalısınız. Başlangıçta sorulan bir tıklama olayı olmadan yapılabilir. Yukarıdaki düğmenizde bu sınıfı değiştirmesi gereken başka bir düğmeniz varsa ne olur? Şimdi güncellenmeyecek çünkü ng-class ile değil, tıklamayla değiştiriyorsunuz
Ronnie

1
Bu jqLite'den. Daha fazla bilgi için docs.angularjs.org/api/ng/function/angular.element
Ruhul Amin

1
Anlıyorum. Demek istediğim, orijinal sorunun cevabını elde etmek için jQuery kullanmanıza gerek yok.
Ronnie
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.