Angular.js: L'utilisation de plusieurs expressions liées une fois dans ng-if génère une erreur

Créé le 22 mars 2015  ·  3Commentaires  ·  Source: angular/angular.js

J'ai mon code comme suit :

one_time.js

var sample = angular.module('sample', []);

sample.controller('OneTimeController', function () {
    this.name = 'John';
    this.blah = 'sdflk';
});

index.html
<!DOCTYPE html>
<html>

<head>
  <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
  <script type="text/javascript" src="one_time.js"></script>
</head>

<body ng-app="sample">
<div ng-controller="OneTimeController as test">
  <p>Input something in the input box:</p>
  <p>Name: <input type="text" ng-model="test.name" value="John"></p>
  <p ng-bind="test.name"></p>
  <p ng-bind="::test.name"></p>
  <p ng-if="test.name && test.blah">testing</p> <!-- works perfectly-->
  <p ng-if="::test.name && test.blah">testing with first expression as one time binded</p> <!-- works but the second property is not one time binded-->
  <p ng-if="::test.name && ::test.blah">testing with one time bind</p><!-- doesn't work throws syntax error-->

</div>
</body>
</html>

J'essaie d'afficher une balise <p> avec une condition ng-if dans laquelle je veux que la propriété name soit liée une fois. Je sais déjà que cela ne changera pas, alors je voulais essayer une liaison unique dans ng-if également. Cela fonctionne parfaitement lorsque je n'utilise pas de liaison unique ou lorsque je n'utilise qu'une liaison unique avec la première expression dans ce cas <p ng-if="::test.name && test.blah">testing with first expression as one time binded</p> , cependant lorsque j'essaie d'utiliser une liaison unique dans plus d'une expression couplée avec un opérateur de garde, il me renvoie une erreur en tant qu'erreur de syntaxe :

Error: [$parse:syntax] Syntax Error: Token ':' not a primary expression at column 14 of the expression [test.name && ::test.blah && ::test.blah] starting at [::test.blah && ::test.blah].
http://errors.angularjs.org/1.3.14/$parse/syntax? 

Est-ce un bug ou une véritable erreur de syntaxe ? J'utilise angularjs version 1.3.14.

Commentaire le plus utile

Je pense que vous devriez utiliser () pour les liaisons ponctuelles avec des expressions ex. : <p ng-if="::(test.name && test.blah)">testing with first expression as one time binded</p>

Tous les 3 commentaires

Je pense que vous devriez utiliser () pour les liaisons ponctuelles avec des expressions ex. : <p ng-if="::(test.name && test.blah)">testing with first expression as one time binded</p>

@piernik Merci fonctionne comme un charme. J'essayais (::test.name) && (::test.blah) mais il semble que le tout premier :: active la liaison unique. :+1:

la liaison unique (::) s'applique à toutes les expressions utilisées dans le ng-if.
<p ng-if="::test.name && test.blah"> is same as <p ng-if="::(test.name && test.blah)">

Malheureusement, nous ne pouvons pas mélanger une liaison unique avec des expressions de liaison unidirectionnelle dans une seule expression en js angulaire.

Cette page vous a été utile?
0 / 5 - 0 notes