ngClass style with dash in key

Angularjs

Angularjs Problem Overview


I hope this saves someone a headache with styles that use dashes, especially since bootstrap has become so popular.

I am using angular 1.0.5 by way of

<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.0.5/angular.js"></script>

In the ngClass documentation, the example is simple, but it also mentions the expression can be a map of class names to boolean values. I was trying to use the "icon-white" style on my icon as shown in the bootstrap documentation, depending on a boolean variable.

<i class="icon-home" ng-class="{icon-white: someBooleanValue}">

The line above does not work. The class is not appended with icon-white when someBooleanValue is true. However, if I change the key to iconWhite, it is successfully added to the list of class values. How would one add a value with a dash?

Angularjs Solutions


Solution 1 - Angularjs

After hours of hacking around, it turns out the dash gets interpolated! Quotes are needed.

<i class="icon-home" ng-class="{'icon-white': someBooleanValue}">

UPDATE:

In older versions of Angular, using a backslash also does the trick, but not in the newer versions.

<i class="icon-home" ng-class="{icon\-white: someBooleanValue}">

The former is probably preferred, since you can more easily search for it in your favorite editor.

Solution 2 - Angularjs

\'icon-white\' works as well (with AngularJS 1.2.7)

Solution 3 - Angularjs

alternative for uses ng-class :

	.menu-disabled-true{
color: red;
}
	.menu-disabled-false{
color: green;
}


<div ng-controller="DeathrayMenuController">
<p class=menu-disabled-{{status}}>shanam</p>
 <button ng-click="action()">click me</button>
</div>

<script>
 
 

function DeathrayMenuController($scope) {
	$scope.status=true
	$scope.action= function(){
      $scope.status=!$scope.status
	}
}
</script>

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionFoo LView Question on Stackoverflow
Solution 1 - AngularjsFoo LView Answer on Stackoverflow
Solution 2 - AngularjsBromoxidView Answer on Stackoverflow
Solution 3 - AngularjszloctbView Answer on Stackoverflow