Koşullu bir ifadeyle açısal JS stili


267

Sorunumu şu şekilde ele alıyorum:

ng-style="{ width: getTheValue() }"

Ancak bu fonksiyonun kontrolör tarafında olmasını önlemek için, böyle bir şey yapmayı tercih ederim:

ng-style="{ width: myObject.value == 'ok' ? '100%' : '0%' }"

Bunu nasıl yapabilirim?


17
hangi açısal versiyonunu kullanıyorsunuz? En azından 1.1.5 ile bu herhangi bir değişiklik olmadan mümkündür. demo
Yoshi

1.0.8 kullanıyorum :) Ah çok kötü, gerçekten yükseltmeye çalışmalıyım o zaman ... teşekkürler!
TigrouMeow

4
1.1.5 ile kodunuz çalışıyor olsa da, genişlik (örneğin, font boyutu) yerine başka stil özellikleri kullanırsanız, kodunuz siz bunu değiştirene kadar çalışmaz: ng-style = "{ 'font-size' : myObject.value == 'ok'? '20px': '10px'} "(style özelliğini tırnak işaretleri içine almalıdır).
BornToCode

Bu yararlı olduğunu bilmiyorum ama yeni gelenler için ng stili bir nesne ile kullanabilirsiniz ama bu ng-style = "objectBit? {'Border': '1px katı kırmızı'}: {'border': 'none'}"
Usman I

Yanıtlar:


124

@Yoshi'nin dediği gibi, açısal 1.1.5'ten itibaren herhangi bir değişiklik yapmadan kullanabilirsiniz.

Açısal <1.1.5 kullanırsanız, ng sınıfı kullanabilirsiniz .

.largeWidth {
    width: 100%;
}

.smallWidth {
    width: 0%;
}

// [...]

ng-class="{largeWidth: myVar == 'ok', smallWidth: myVar != 'ok'}"

3
Tamam teşekkürler! Sadece herhangi bir sınıf kullanmadan bunu yapmanın bir yolu olup olmadığını merak ettim, ama her şey doğrudan Angular'ı şablonda kullanıyor.
TigrouMeow

1
Bunu birden fazla sınıf adı için nasıl kullanabilirim?
Thanigainathan

3
Ve eğer açısal> 1.1.5 kullanıyorsam?
bigpony

14
Bu soruya tam olarak cevap vermiyor.
Lee

1
Bu soru tam anlamıyla ng tarzı bir örnek ister ve 100'den fazla oyla kabul edilen cevap bunu sağlamaz.
JWiley

361

basit bir örnek:

<div ng-style="isTrue && {'background-color':'green'} || {'background-color': 'blue'}" style="width:200px;height:100px;border:1px solid gray;"></div>

{'background-color': 'yeşil'} GERİ DÖN

VEYA aynı sonuç:

<div ng-style="isTrue && {'background-color':'green'}" style="width:200px;height:100px;border:1px solid gray;background-color: blue"></div>

diğer koşullu olasılıklar:

<div ng-style="count === 0 && {'background-color':'green'}  || count === 1 && {'background-color':'yellow'}" style="width:200px;height:100px;border:1px solid gray;background-color: blue"></div>

Bunu nasıl yapabilirim, ancak birden fazla bağımsız stil / koşulla? Teşekkürler, büyük cevap btw.
Adam Plocher

@Arthur örneğiniz kontrol edecek isTrue ve {'background-color':'green'} VEYA sadece kontrol isTrueedecek ve background nasıl çalışacağını koyacağız lütfen açıklayınız?
Rajnish Rajput

1
@ rajnish-rajput isTrue'yi kontrol edip arka plan, {'background-color': 'green'} koyuyor ve varsayılan olarak bir stil nesnesi olarak true olarak
dönüyor

100

Bunu şu şekilde başarabilirsiniz:

ng-style="{ 'width' : (myObject.value == 'ok') ? '100%' : '0%' }"

43

@jfredsilva açıkçası soru için en basit cevaba sahiptir :

ng-style = "{'width': (myObject.value == 'ok')? '% 100': '% 0'}"

Ancak, cevabımı daha karmaşık bir şey için düşünmek isteyebilirsiniz.

Üçlü benzeri örnek:

<p ng-style="{width: {true:'100%',false:'0%'}[myObject.value == 'ok']}"></p>

Daha karmaşık bir şey:

<p ng-style="{
   color:       {blueish: 'blue', greenish: 'green'}[ color ], 
  'font-size':  {0: '12px', 1: '18px', 2: '26px'}[ zoom ]
}">Test</p>

Eğer $scope.color == 'blueish'renk 'mavi' olacaktır.

Eğer $scope.zoom == 2yazı tipi boyutu 26 piksel olacaktır.

angular.module('app',[]);
function MyCtrl($scope) {
  $scope.color = 'blueish';
  $scope.zoom = 2;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.0.1/angular.min.js"></script>
<div ng-app="app" ng-controller="MyCtrl" ng-style="{
   color:       {blueish: 'blue', greenish: 'green'}[ color ], 
  'font-size':  {0: '12px', 1: '18px', 2: '26px'}[ zoom ]
}">
  color = {{color}}<br>
  zoom = {{zoom}}
</div>


ilginç sözdizimi {<value>:'<string>'}[<$scope.var>]}, nereden geliyor?
netalex

10

ifade ile kullanmak istiyorsanız, sağlam yol:

<span class="ng-style: yourCondition && {color:'red'};">Sample Text</span>

ama en iyi yol ng-class kullanmak


Syntax Error: Token '%3A' is%20an%20unexpected%20token at column 9 of the expression [ng-style%3A%...
Z. Khullah

9

Genel bir notta, arka plan resmindeki değişiklikle birlikte koşullu değişiklikleri kullanabilir ng-ifve ng-stylebirleştirebilirsiniz.

<span ng-if="selectedItem==item.id"
              ng-style="{'background-image':'url(../images/'+'{{item.id}}'+'_active.png)','background-size':'52px 57px','padding-top':'70px','background-repeat':'no-repeat','background-position': 'center'}"></span>
        <span ng-if="selectedItem!=item.id"
              ng-style="{'background-image':'url(../images/'+'{{item.id}}'+'_deactivated.png)','background-size':'52px 57px','padding-top':'70px','background-repeat':'no-repeat','background-position': 'center'}"></span>

Bu Uncaught Error: Template parse errors: Can't bind to 'ng-style' since it isn't a known property of 'div'benim için hataya neden oldu
Serj Sagan

6

Tekli css mülkiyeti için

ng-style="1==1 && {'color':'red'}"

Birden fazla css özelliği için aşağıdaki kaynaklardan bahsedilebilir

ng-style="1==1 && {'color':'red','font-style': 'italic'}"

1 == 1 ifadesini koşul ifadenizle değiştirin


4

Ayrıca üçlü operatör için bu sözdizimi çalışacaktır:

  ng-style="<$scope.var><condition> ? {
        '<css-prop-1>':((<value>) / (<value2>)*100)+'%',
        '<css-prop-2>':'<string>'
      } : {
        '<css-prop-1>':'<string>',
        '<css-prop-2>':'<string>'
      }"

<value>$ scope özellik değerleri nerede . Örnek olarak:

ng-style="column.histograms.value=>0 ? 
  {
    'width':((column.histograms.value) / (column.histograms.limit)*100)+'%',
    'background':'#F03040'
  } : {
    'width':'1px',
    'background':'#2E92FA'
  }"

`

bu, css özellik değerlerine bazı hesaplamalara izin verir.


3

Birden fazla ve bağımsız koşullar için aşağıdaki gibi yapıyorum ve çekicilik gibi çalışır:

<div ng-style="{{valueFromJS}} === 'Hello' ? {'color': 'red'} : {'color': ''} && valueFromNG-Repeat === '{{dayOfToday}}' ? {'font-weight': 'bold'} : {'font-weight': 'normal'}"></div>

2

Stil eklemek için ng sınıfı kullanıyorum: -

 ng-class="column.label=='Description'  ? 'tableStyle':                     
           column.label == 'Markdown Type' ? 'Mtype' : 
           column.label == 'Coupon Number' ? 'couponNur' :  ''
           "

Stil vermek için angular.js'deki üçlü sınıf yönergelerinin yanı sıra üçlü operatör kullanma . Ardından .css veya .scss dosyasında sınıf stilini tanımlayın . Örneğin :-

.Mtype{
       width: 90px !important;
       min-width: 90px !important;
       max-width: 90px !important;
      }
.tableStyle{
         width: 129px !important;
         min-width: 129px !important;
         max-width: 129px !important;
}
.couponNur{
         width: 250px !important;
         min-width: 250px !important;
         max-width: 250px !important;
}

-1

Sizin için nasıl çalıştığından emin değilim ama Angular 9'da ngStyle'ı bu gibi parantez içinde sarmak zorundayım:

[ng-style]="{ 'width' : (myObject.value == 'ok') ? '100%' : '0%' }"

Aksi takdirde çalışmaz

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.