angularjs - switch - Estilo ng angular con una expresión condicional.
ng-model (10)
Estoy manejando mi problema de esta manera:
ng-style="{ width: getTheValue() }"
Pero para evitar tener esta función en el lado del controlador, preferiría hacer algo como esto:
ng-style="{ width: myObject.value == ''ok'' ? ''100%'' : ''0%'' }"
¿Cómo puedo hacer esto?
@jfredsilva obviamente tiene la respuesta más simple para la pregunta:
ng-style = "{''width'': (myObject.value == ''ok'')? ''100%'': ''0%''}"
Sin embargo, es posible que realmente desee considerar mi respuesta para algo más complejo.
Ejemplo ternario:
<p ng-style="{width: {true:''100%'',false:''0%''}[myObject.value == ''ok'']}"></p>
Algo más complejo:
<p ng-style="{
color: {blueish: ''blue'', greenish: ''green''}[ color ],
''font-size'': {0: ''12px'', 1: ''18px'', 2: ''26px''}[ zoom ]
}">Test</p>
Si $scope.color == ''blueish''
, el color será ''blue''.
Si $scope.zoom == 2
, el tamaño de fuente será 26px.
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>
Como dijo @Yoshi, desde el 1.1.5 angular puedes usarlo sin ningún cambio.
Si usa angular <1.1.5, puede usar ng-class .
.largeWidth {
width: 100%;
}
.smallWidth {
width: 0%;
}
// [...]
ng-class="{largeWidth: myVar == ''ok'', smallWidth: myVar != ''ok''}"
En una nota genérica, puede usar una combinación de ng-if
y ng-style
incorporan cambios condicionales con cambios en la imagen de fondo.
<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>
Estoy haciendo lo siguiente para condiciones múltiples e independientes y funciona a la perfección:
<div ng-style="{{valueFromJS}} === ''Hello'' ? {''color'': ''red''} : {''color'': ''''} && valueFromNG-Repeat === ''{{dayOfToday}}'' ? {''font-weight'': ''bold''} : {''font-weight'': ''normal''}"></div>
Estoy usando ng-class para agregar estilo: -
ng-class="column.label==''Description'' ? ''tableStyle'':
column.label == ''Markdown Type'' ? ''Mtype'' :
column.label == ''Coupon Number'' ? ''couponNur'' : ''''
"
Uso del operador ternario junto con las directivas de la clase ng en angular.js para dar estilo. Luego defina el estilo para la clase en el archivo .css o .scss . P.ej :-
.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;
}
Para propiedad css individual
ng-style="1==1 && {''color'':''red''}"
Para múltiples propiedades css a continuación se pueden consultar
ng-style="1==1 && {''color'':''red'',''font-style'': ''italic''}"
Reemplace 1 == 1 con su expresión de condición
Puedes lograrlo así:
ng-style="{ ''width'' : (myObject.value == ''ok'') ? ''100%'' : ''0%'' }"
Si quieres usar con expresión, el camino correcto es:
<span class="ng-style: yourCondition && {color:''red''};">Sample Text</span>
pero la mejor manera es usando ng-class
También esta sintaxis para operador ternario funcionará:
ng-style="<$scope.var><condition> ? {
''<css-prop-1>'':((<value>) / (<value2>)*100)+''%'',
''<css-prop-2>'':''<string>''
} : {
''<css-prop-1>'':''<string>'',
''<css-prop-2>'':''<string>''
}"
donde <value>
son los valores de propiedad de $ scope. Por ejemplo:
ng-style="column.histograms.value=>0 ?
{
''width'':((column.histograms.value) / (column.histograms.limit)*100)+''%'',
''background'':''#F03040''
} : {
''width'':''1px'',
''background'':''#2E92FA''
}"
`` `
esto permite un cierto cálculo en los valores de propiedad css.
ejemplo simple:
<div ng-style="isTrue && {''background-color'':''green''} || {''background-color'': ''blue''}" style="width:200px;height:100px;border:1px solid gray;"></div>
{''background-color'': ''green''} RETURN verdadero
O el mismo resultado:
<div ng-style="isTrue && {''background-color'':''green''}" style="width:200px;height:100px;border:1px solid gray;background-color: blue"></div>
otra posibilidad condicional:
<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>