Angular.js: O uso de múltiplas expressões vinculadas uma única vez em ng-if gera erro

Criado em 22 mar. 2015  ·  3Comentários  ·  Fonte: angular/angular.js

Eu tenho meu código da seguinte maneira:

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>

Estou tentando mostrar uma tag <p> com uma condição ng-if na qual quero que a propriedade name seja associada uma vez. Eu já sei que não vai mudar, então queria tentar uma ligação única no ng-if também. Funciona perfeitamente quando eu não uso a vinculação única ou quando uso apenas a vinculação única com a primeira expressão neste caso <p ng-if="::test.name && test.blah">testing with first expression as one time binded</p> , no entanto, quando tento usar a vinculação única em mais de uma expressão juntamente com um operador de guarda, ele me lança um erro como um erro de sintaxe:

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? 

Isso é um bug ou um erro de sintaxe genuíno? Estou usando o angularjs versão 1.3.14.

Comentários muito úteis

Eu acho que você deveria usar () para ligações no tempo com expressões ex .: <p ng-if="::(test.name && test.blah)">testing with first expression as one time binded</p>

Todos 3 comentários

Eu acho que você deveria usar () para ligações no tempo com expressões ex .: <p ng-if="::(test.name && test.blah)">testing with first expression as one time binded</p>

Obrigado @piernik funciona (::test.name) && (::test.blah) mas parece que o primeiro :: ativa a ligação única. : +1:

a vinculação única (: :) se aplica a todas as expressões usadas no ng-if.
<p ng-if="::test.name && test.blah"> is same as <p ng-if="::(test.name && test.blah)">

Infelizmente, não podemos misturar a vinculação única com expressões de vinculação unilateral em uma única expressão em angular js.

Esta página foi útil?
0 / 5 - 0 avaliações