AngularJs conditional display for ng-options

Stellaire picture Stellaire · Oct 2, 2013 · Viewed 29.5k times · Source

I've been searching for a few hours now and I can't seem to find the answer for my problem anywhere. I remember that I was able to implement it before but for some reason I lost the code and I can't seem to remember what I did to make it work.

I'm trying display data from an array in a select box using ng-options. That one I have no problems with. What I need to implement is that only certain array values will be displayed/included in the select box.

My data is as follows:

$scope.chartList = [ { "id" : 1, "name" : "chart 1", "order" : 1, "active" : false },
                     { "id" : 2, "name" : "chart 2", "order" : 2, "active" : true },
                     { "id" : 3, "name" : "chart 3", "order" : 3, "active" : true },
                     { "id" : 4, "name" : "chart 4", "order" : 4, "active" : true }, 
                     { "id" : 5, "name" : "chart 5", "order" : 5, "active" : true } ];

And my HTML looks like:

<select ng-model="toAddChart" ng-options="chart.id as chart.name for chart in chartList | filter:chart.active=='false'">
  <option value=""></option>
</select>

So what I want to happen is that if the value of the attribute "active" is false then it's the only time the array item will be displayed/included in the select list. I've tried different permutations of the filter attribute but none seem to work.

I know I can easily use ng-repeat in the tag and use ng-show but I remember reading somewhere (again, I can't find where) that it's not the proper way to implement it and that using ng-options is the correct way.

I'm really really sure I was able to do it before without creating a custom javascript filter, but for the life of me I can't remember how I did it. I'm hoping someone can

Hope someone can help me with this because I'm out of ideas.

Update:

Great scott, I think I've got it.

Instead of:

filter:chart.active=='false'

It should be:

filter:chart.active='false'

It's just the number of equal signs used. facepalm

Thanks for the responses, everyone.

Answer

Stellaire picture Stellaire · Mar 14, 2014

Great scott, I think I've got it.

Instead of:

filter:chart.active=='false'

It should be:

filter:chart.active='false'

It's just the number of equal signs used. facepalm

Thanks for the responses, everyone.