Ng-class kullanarak birden fazla sınıf ekleme


542

Birden fazla ng sınıfı eklemek için birden fazla ifademiz olabilir mi?

örneğin.

<div ng-class="{class1: expressionData1, class2: expressionData2}"></div>

Cevabınız evet ise, herkes bunu örnek verebilir.

.


17
Örneğin olduğu gibi çalışır.
Steve Klösters

Evet öyle, css'de görünür yapmak için sadece kullanmak zorunda kaldım. Kendim buldum :)
Aditya Sethi

@Stevuu ne dedi .. ri8 ... ur soru cevap
YaswanthJg

ExpressionData1 değeri genellikle true / false veya gerçekte bir dize değeri alır mı?
Martian2049

Yanıtlar:


978

Farklı ifadeler aşağıdakileri değerlendirdiğinde farklı sınıflar uygulamak için true:

<div ng-class="{class1 : expression1, class2 : expression2}">
    Hello World!
</div>

Bir ifade doğru olduğunda birden çok sınıf uygulamak için:

<!-- notice expression1 used twice -->
<div ng-class="{class1 : expression1, class2 : expression1}">
    Hello World!
</div>

ya da oldukça basit:

<div ng-class="{'class1 class2' : expression1}">
    Hello World!
</div>

Css sınıflarını çevreleyen tek tırnak dikkat edin.


11
ng-class = "{'class1 class2': expression1}" gibi birden fazla sınıfı geçemezsiniz, sadece bunu test edin ve hiç çalışmadı, @CodeHater'ın "Bir ifade doğru olduğunda birden fazla sınıf uygulamak için:" dedi. hile
d1jhoni1b

8
1.2.16'da çok sınıflı seçenek ( 'class1 class2': expression) iyi çalışıyor gibi görünmektedir, ancak bir sınıfı yeniden kullanırsanız, ifade seçenekler arasında geçiş yaptığında bırakılır. Örneğin, 'commonClass class1': expression == true, 'commonClass class2': expression == falsecommonClass ifadesi, ifade doğru ile yanlış arasında geçiş yaparken kaybolur.
BrianS

10
@BrianS Böyle bir şey yapardım:class="commonClass" ng-class={'class1' : expression, 'class2' : !expression}
AlwaysALearner

@CodeHater teşekkürler. Şu anda planladığım şey bu, CSS'yi düzeltmek için biraz zaman ayırmanız gerekiyor.
BrianS

ng-class="{'class1' : expression1, 'class2':expression1 }"mümkün?
Soruma bakabilir

48

Üçlü operatör gösterimi için:

<div ng-class="expression1? 'class1 class2' : 'class3 class4'">

Bu benim için çalışmıyor. <span ng-class = "params.isAdmin? 'fa fa-lock fa-2x': 'fa fa-unlock fa-2x'"> </span>. Konsol hata verir.
TommyQu

bu yöntemi kullanarak başka bir ifade ekleyebilir miyim?
Zam Nalbandyan

6
@HikeNalbandyan evet başka bir ifade de ekleyebilirsiniz:ng-class="[expression1? 'class1 class2' : 'class3 class4', expression2 ? 'class5' : 'class6']"
mahi-man

47

Evet, ng sınıfına birden çok sınıf eklemek için birden fazla ifadeniz olabilir.

Örneğin:

<div ng-class="{class1:Result.length==2,class2:Result.length==3}"> Dummy Data </div>

45

Buradaki diğer cevaplara inanılmaz derecede güçlü bir alternatif:

ng-class="[  { key: resulting-class-expression }[ key-matching-expression ], ..  ]"

Bazı örnekler:

1. Sadece div'e 'class1 class2 class3' ekler:

<div ng-class="[{true: 'class1'}[true], {true: 'class2 class3'}[true]]"></div>

2. $ dizinine bağlı olarak div öğesine 'tek' veya 'çift' sınıflar ekler:

<div ng-class="[{0:'even', 1:'odd'}[ $index % 2]]"></div>

3. $ indeksine dayalı olarak her div için dinamik olarak bir sınıf oluşturur

<div ng-class="[{true:'index'+$index}[true]]"></div>

Bu $index=5şu şekilde sonuçlanacaksa:

<div class="index5"></div>

İşte çalıştırabileceğiniz bir kod örneği:

var app = angular.module('app', []); 
app.controller('MyCtrl', function($scope){
  $scope.items = 'abcdefg'.split('');
}); 
.odd  { background-color: #eee; }
.even { background-color: #fff; }
.index5 {background-color: #0095ff; color: white; font-weight: bold; }
* { font-family: "Courier New", Courier, monospace; }
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js"></script>

<div ng-app="app" ng-controller="MyCtrl">
  <div ng-repeat="item in items"
    ng-class="[{true:'index'+$index}[true], {0:'even', 1:'odd'}[ $index % 2 ]]">
    index {{$index}} = "{{item}}" ng-class="{{[{true:'index'+$index}[true], {0:'even', 1:'odd'}[ $index % 2 ]].join(' ')}}"
  </div>
</div>


2
Mükemmel cevap! Her zaman daha karmaşık ng-classyönergeler için işlevler kullandım , örneğin aynı öğeye üçlü ve standart bir ifade uygulamak gerektiğinde. Kabul edilen yanıta, ifade dizilerinin kullanımını içeren bir düzenleme gönderdim.
Daniel Bonnell

Ben bir Açısal uzman değilim, ama görünüşe göre bu yapı: bu [{true:'index'+$index}[true], {0:'even', 1:'odd'}[ $index % 2 ]]şekilde basitleştirilebilir ['index'+$index, {0:'even', 1:'odd'}[ $index % 2 ]]. Ben sadece Açısal 1.5.9 denedim ve işe yarıyor :) Harika bir cevap için teşekkürler!
vadipp

30

$scopeDenetleyicide bir yöntem kullanarak , görünümde hangi sınıfların verileceğini hesaplayabilirsiniz. Bu, özellikle sınıf adlarını hesaplamak için karmaşık bir mantığınız varsa kullanışlıdır ve görünümünüzdeki mantık miktarını denetleyiciye taşıyarak azaltacaktır:

app.controller('myController', function($scope) {

    $scope.className = function() {

        var className = 'initClass';

        if (condition1())
            className += ' class1';

        if (condition2())
            className += ' class2';

        return className;
    };
});

ve görünümde, basitçe:

<div ng-class="className()"></div>

1
Oluşturma işleminden sonra sınıf değişirse, ng sınıfı hala değişiklikleri dinliyor classNamemu?
remarsh

3
IMHO, kapsamı yalnızca göstermelidir koşulu . Bu koşul karşılandığında ng-hangi sınıfın kullanılacağını belirlemek HTML bağlantılarına bağlı olmalıdır .
Alnitak

1
Bu, dom öğelerindeki class özniteliğinin üzerine yazar. Eğer biri bunu kullanıyorsa, iade edilenler için koşul gerektirmeyen sınıfları dahil etmek zorundadırlar className.
phuwin

20

Örneğiniz koşullu sınıflar için çalışır (sınıf adı expressionDataX, doğruysa gösterilir):

<div ng-class="{class1: expressionData1, class2: expressionData2}"></div>

Öğenin kullanıcısı tarafından sağlanan birden çok sınıf da ekleyebilirsiniz:

<div ng-class="[class1, class2]"></div>

Kullanımı:

<div class="foo bar" class1="foo" class2="bar"></div>


3
Eğer şablonun iki tür birleştirmek mümkün olup olmadığını biliyor musunuz, yani şartlı sınıf kullanarak sahip {}ve bir veri-ciltli sınıf kullanarak []?
jwg

3
Bildiğim kadarıyla bu mümkün değil. Ayrıca, ngClassbir öğeye iki yönerge koymak mümkün değildir .
seldary

Teşekkürler! Bu başka bir yerde doğrulanmış gibi görünüyor.
jwg

2
şaşıracaksınız: <a href="#/u/[[msg.from]]" ng-bind="msg.from" class="name, ng-class:[users[msg.from].nice, users[msg.from].star];" ng-class="{premium: users[msg.from].premium}"></a>ve daha fazlası: scotch.io/tutorials/javascript/the-many-ways-to-use-ngclass
mayankcpdixit

1
@jwg: ans burada iki tür şablonu birleştirebilirsiniz: stackoverflow.com/questions/29230732/…
satish kumar V

12

OR || kullanarak çoklu açısal-ui-yönlendirici durumlarını karşılaştıran bir örnek Şebeke:

<li ng-class="
    {
        warning:
            $state.includes('out.pay.code.wrong')
            || $state.includes('out.pay.failed')
        ,
        active:
            $state.includes('out.pay')
    }
">

Koşullara uyulup uyulmadığına bağlı olarak sınıflara uyarı ve / veya aktif bilgi verecektir.


Gerçekten hatırlayamıyorum. Yine de mantıklı değil mi?
nitech

Koşullarının her biri karşılandığı sürece, aynı ng sınıfı bloktan birden fazla sınıfın uygulanabileceğini açıkladığınız için teşekkür ederiz.
cedricdlb

6

Aşağıda aktif ve activemenu sınıflar ve itemCount ve ShowCart ifadeler / boolean değerleridir.

ng-class="{'active' : itemCount, 'activemenu' : showCart}"

5

Birden fazla koşulda

<div ng-class="{'class1' : con1 || can2, 'class2' : con3 && con4}">
Hello World!
</div>

4

Scotch.io sayesinde başka bir yol buldum

<div ng-repeat="step in steps" class="step-container step" ng-class="[step.status, step.type]" ng-click="onClick(step.type)">

Bu benim referansımdı. YOL


3

Diğer bir yolla "birden çok sınıf kullanarak" kontrol etmek için bir işlev oluşturabiliriz

CSS

 <style>
    .Red {
        color: Red;
    }
    .Yellow {
        color: Yellow;
    }
      .Blue {
        color: Blue;
    }
      .Green {
        color: Green;
    }
    .Gray {
        color: Gray;
    }
    .b {
         font-weight: bold;
    }
</style>

Senaryo

<script>
    angular.module('myapp', [])
            .controller('ExampleController', ['$scope', function ($scope) {
                $scope.MyColors = ['It is Red', 'It is Yellow', 'It is Blue', 'It is Green', 'It is Gray'];
                $scope.getClass = function (strValue) {
                    if (strValue == ("It is Red"))
                        return "Red";
                    else if (strValue == ("It is Yellow"))
                        return "Yellow";
                    else if (strValue == ("It is Blue"))
                        return "Blue";
                    else if (strValue == ("It is Green"))
                        return "Green";
                    else if (strValue == ("It is Gray"))
                        return "Gray";
                }
        }]);
</script>

Kullanma

<body ng-app="myapp" ng-controller="ExampleController">

<h2>AngularJS ng-class if example</h2>
<ul >
    <li ng-repeat="icolor in MyColors" >
        <p ng-class="[getClass(icolor), 'b']">{{icolor}}</p>
    </li>
</ul>

Örneğin , ng-class'taki tam kod sayfasına başvurabilirsiniz

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.