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