193 votes

AngularJS : ng-show / ng-hide ne fonctionne pas avec l'interpolation `{{}}`.

J'essaie d'afficher ou de masquer du HTML à l'aide de la fonction ng-show et ng-hide les fonctions fournies par AngularJS .

Selon la documentation, l'utilisation respective de ces fonctions est la suivante :

ngHide - {expression} - Si l'expression est vraie, l'élément est affiché ou caché respectivement. ngShow - {expression} - Si l'expression est vraie, l'élément est affiché ou caché respectivement.

Cela fonctionne pour le cas d'utilisation suivant :

<p ng-hide="true">I'm hidden</p>
<p ng-show="true">I'm shown</p>

Cependant, si l'on utilise un paramètre d'un objet comme expression, alors la fonction ng-hide et ng-show reçoivent le bon true / false mais les valeurs ne sont pas traitées comme un booléen et retournent toujours 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>

Résultat

<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>

Soit il s'agit d'un bogue, soit je ne fais pas les choses correctement.

Je ne trouve aucune information relative au référencement des paramètres d'objets en tant qu'expressions. J'espérais donc que quelqu'un ayant une meilleure compréhension d'AngularJS pourrait m'aider ?

375voto

My Head Hurts Points 16980

El foo.bar ne doit pas contenir les accolades :

<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>

Angulaire expressions doivent se trouver à l'intérieur des accolades, alors qu'avec Angular directives ne le font pas.

Voir aussi Comprendre les modèles Angular .

76 votes

"Les expressions Angular doivent être à l'intérieur des accolades, alors que les directives Angular ne le sont pas." Cette ligne juste là. J'aimerais pouvoir upvoter ça deux fois.

3 votes

Si vous voulez vérifier si le dossier a une valeur d'usage : <p ng-show="foo.bar === 'test'">I could be shown, or I could be hidden</p>

1 votes

Merci, ce n'était pas très intuitif (comme vous pouvez le constater avec tous les votes positifs).

31voto

SHIVANG SANGHI Points 215

Vous ne pouvez pas utiliser {{}} lors de l'utilisation de directives angulaires pour la liaison avec ng-model mais pour lier des attributs non-angulaires, vous devrez utiliser {{}} ..

Eg :

ng-show="my-model"
title = "{{my-model}}"

18voto

hrn Points 85

Essayez d'envelopper l'expression avec :

$scope.$apply(function() {
   $scope.foo.bar=true;
})

7 votes

Le site foo.bar = true devrait être scope.foo.bar = true pour modifier la valeur de foo.bar

1 votes

J'avais un problème étrange où parfois il s'affichait et parfois non, envelopper mes mises à jour de portée dans $scope.$apply(function () { }) ; a fonctionné pour moi :)

0 votes

Je suis nouveau dans angular et je préférerais vraiment ne pas faire cela chaque fois que j'ai besoin de définir une variable. Quelqu'un peut-il m'expliquer pourquoi cela est parfois nécessaire ?

7voto

rajkamal Points 3409

Depuis ng-show est un attribut angulaire je pense, nous n'avons pas besoin de mettre l'évaluation entre parenthèses ( {{}} )..

Pour les attributs tels que class nous devons encapsuler les variables avec des crochets de fleur d'évaluation ( {{}} ).

0 votes

Fermer - J'ai regardé et il semble que l'angulaire expressions doivent être entre crochets où l'angulaire directives ne pas

7voto

Anil Singh Points 31
<script src="http://code.angularjs.org/1.2.0-rc.2/angular.js"></script>
<script type="text/javascript">
    function controller($scope) {
        $scope.data = {
            show: true,
            hide: false
        };
    }
</script>

<div ng-controller="controller">
    <div ng-show="data.show"> If true the show otherwise hide. </div>
    <div ng-hide="!(data.hide)"> If true the show otherwise hide.</div>
</div>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X