How do I compare with a string in ng-class?

orbitory picture orbitory · Aug 7, 2014 · Viewed 18k times · Source

This line doesn't seem to work for me.

Sort By: <a href="" ng-click="setOrder('title')" ng-class="{active: orderProp == 'title'}">Alphabetical</a>

Do I have to escape 'title' in orderProp == 'title' somehow?

in the controller I have

...
$scope.orderProp = 'title';
$scope.setOrder = function(sortBy){
            $scope.orderProp = sortBy;
}
...

Thank you

Update: Using v1.3.0-beta.17

Adding ng-class="{active:orderProp=='pagetitle'} to

<a href="" ng-click="setOrder('pagetitle')" ng-class="{active:orderProp=='pagetitle'}">Alphabetical</a>

throws an error

"Error: [$parse:syntax] http://errors.angularjs.org/1.3.0-beta.17/$parse/syntax?p0=undefined&p1=not%20a%20primary%20expression&p2=null&p3=%7Bactive%3AorderProp%3D%3D&p4=%7Bactive%3AorderProp%3D%3D

Sorry for the way I present the error but I just started angular last week and don't know a better way

Update 2: error seems to be coming from = == ===. I tried > and no error occured. Is there an alternative syntax to like eq?

Update 3 with solve

I mapped each string to an int pagetile->1 code->2 + data-ng-class="{active:orderPropIdx==1};" Inside the controller I just do if pagetitle set active:orderPropIdx to 1 and so on

Maybe this is a bug in angular 1.3

Answer

Noppey picture Noppey · Jan 23, 2015

As is stated in the comments, your class name should be surrounded by single quotes.

ng-class="{'active': orderProp == 'title'}">

This comparison is case sensitive.