AngularJS-ng-стиль із умовним виразом


267

Я вирішую свою проблему так:

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

Але щоб уникнути виникнення цієї функції на стороні контролера, я б вважав за краще зробити щось подібне:

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

Як я можу це зробити?


17
яку версію кутового ви використовуєте? Принаймні, з 1.1.5 це можливо без будь-яких змін. demo
Yoshi

Я використовую 1.0.8 :) Дуже погано, я б дійсно спробував тоді оновити ... дякую!
TigrouMeow

4
Хоча з 1.1.5 ваш код працює, якщо ви використовуєте інші властивості стилю замість ширини (наприклад, розмір шрифту), ваш код не працюватиме, поки ви не зміните його на: ng-style = "{ 'font-size' : myObject.value == 'ok'? '20px': '10px'} "(повинен оточувати властивість стилю цитатами).
BornToCode

Я не знаю, що це корисно, але для нових бажаючих ви можете використовувати стиль ng з об'єктом, але, як цей ng-style = "objectBit? {'Border":' 1px solid red '}: {' border ':' none '} "
Усман I

Відповіді:


124

Як сказав @Yoshi, з кутового 1.1.5 ви можете використовувати його без будь-яких змін.

Якщо ви використовуєте кутовий <1.1.5, ви можете використовувати клас ng .

.largeWidth {
    width: 100%;
}

.smallWidth {
    width: 0%;
}

// [...]

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

3
Добре, дякую! Я просто задумався, чи є спосіб зробити це без використання будь-яких класів, але все безпосередньо, використовуючи Angular на шаблоні.
TigrouMeow

1
Як використовувати це для кількох імен класу?
Thanigainathan

3
І якщо я використовую кутовий> 1.1.5?
bigpony

14
Це точно не відповідає на питання.
Лі

1
Це запитання буквально задає приклад зі стилем ng, і прийнята відповідь на 100+ голосів цього не передбачає.
JWiley

361

простий приклад:

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

{'background-color': 'green'} ПОВЕРНУТИ правду

АБО той же результат:

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

інша умовна можливість:

<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>

Як я можу досягти цього, але за допомогою декількох незалежних стилів / умов? Дякую, чудова відповідь btw.
Адам Плочер

@Arthur ваш приклад буде перевірити isTrue і {'background-color':'green'} OR він буде перевіряти тільки isTrueі поставить , background як він буде працювати , будь ласка , поясніть хто - небудь?
Rajnish Rajput

1
@ rajnish-rajput збирається перевірити isTrue та поставити тло, {'background-color': 'green'} за замовчуванням повернути true як об’єкт стилю
Артур Цидкілов

100

Ви можете досягти цього так:

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

43

@jfredsilva, очевидно, має найпростішу відповідь на питання:

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

Однак ви, можливо, захочете розглянути мою відповідь на щось складніше.

Приклад, схожий на триріччя:

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

Щось складніше:

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

Якщо $scope.color == 'blueish'колір буде "синім".

Якщо $scope.zoom == 2розмір шрифту складе 26 пікселів.

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>


цікавий синтаксис {<value>:'<string>'}[<$scope.var>]}, звідки він походить?
netalex

10

якщо ви хочете використовувати з виразом, спосіб rigth такий:

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

але найкращим способом є використання ng-класу


Syntax Error: Token '%3A' is%20an%20unexpected%20token at column 9 of the expression [ng-style%3A%...
З. Хулла

9

У загальній ноті ви можете використовувати комбінацію ng-ifта ng-styleвключати умовні зміни зі зміною фонового зображення.

<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>

Це спричинило Uncaught Error: Template parse errors: Can't bind to 'ng-style' since it isn't a known property of 'div'помилку для мене
Serj Sagan

6

Для властивості одного css

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

Для кількох властивостей css можна навести нижче

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

Замініть 1 == 1 своїм виразом умови


4

також цей синтаксис для потрійного оператора буде працювати:

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

де <value>знаходяться значення властивостей $ range. Наприклад:

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

`` `

це дозволяє отримати деякий калькулятор у значеннях властивості css.


3

Я роблю, як нижче, для кількох і незалежних умов, і це працює як шарм:

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

2

Я використовую ng-клас для додавання стилю: -

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

Використання потрійного оператора разом із директивами ng-класу в angular.js для надання стилю. Потім визначте стиль для класу у .css або .scss- файлі. Напр .: -

.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

Не впевнені, як це працює для вас, хлопці, але на Angular 9 мені потрібно загорнути ngStyle в такі дужки:

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

Інакше це не працює

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.