I am trying to show / hide some HTML using the ng-show
and ng-hide
functions provided by AngularJS.
According to the documentation, the respective usage for these functions are as follows:
ngHide – {expression} - If the expression truthy then the element is shown or hidden respectively. ngShow – {expression} - If the expression is truthy then the element is shown or hidden respectively.
This works for the following usecase:
<p ng-hide="true">I'm hidden</p>
<p ng-show="true">I'm shown</p>
However, should we use a parameter from an object as the expression then the ng-hide
and ng-show
are given the correct true
/false
value but the values are not treated as a boolean so always return false
:
Source
<p ng-hide="{{foo.bar}}">I could be shown, or I could be hidden</p>
<p ng-show="{{foo.bar}}">I could be shown, or I could be hidden</p>
Result
<p ng-hide="true">I should be hidden but I'm actually shown</p>
<p ng-show="true">I should be shown but I'm actually hidden</p>
This is either a bug or I am not doing this correctly.
I cannot find any relative information on referencing object parameters as expressions so I was hoping anyone with a better understanding of AngularJS might be able to help me out?
AngularJS ng-hide Directive The ng-hide directive hides the HTML element if the expression evaluates to true. ng-hide is also a predefined CSS class in AngularJS, and sets the element's display to none .
ng-if can only render data whenever the condition is true. It doesn't have any rendered data until the condition is true. ng-show can show and hide the rendered data, that is, it always kept the rendered data and show or hide on the basis of that directives.
The difference is that ng-if removes elements from the DOM. If there are large parts of the code that will not be shown, then ng-if is the way to go. ng-show will only hide the elements but will keep all the handlers.
First of all, the two directives can trip over each other( see this JSFiddle, as provided by Joel Skrepnek), and is generally just bad design. You can use a function, another field or just some more inline-logic.
The foo.bar
reference should not contain the braces:
<p ng-hide="foo.bar">I could be shown, or I could be hidden</p>
<p ng-show="foo.bar">I could be shown, or I could be hidden</p>
Angular expressions need to be within the curly-brace bindings, where as Angular directives do not.
See also Understanding Angular Templates.
You can't use {{}}
when using angular directives for binding with ng-model
but for binding non-angular attributes you would have to use {{}}
..
Eg:
ng-show="my-model"
title = "{{my-model}}"
Try wrapping expression with:
$scope.$apply(function() {
$scope.foo.bar=true;
})
Since ng-show
is an angular attribute i think, we don't need to put the evaluation flower brackets ({{}}
)..
For attributes like class
we need to encapsulate the variables with evaluation flower brackets ({{}}
).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With