Angular.js: El uso de varias expresiones vinculadas de una sola vez en ng-if arroja un error

Creado en 22 mar. 2015  ·  3Comentarios  ·  Fuente: angular/angular.js

Tengo mi código de la siguiente manera:

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>

Estoy tratando de mostrar una etiqueta <p> con una condición ng-if en la que quiero que la propiedad de nombre esté vinculada una vez. Ya sé que no cambiará, así que quería probar una vez la vinculación en ng-if también. Funciona perfectamente cuando no uso un enlace de una sola vez o cuando solo uso un enlace de una vez con la primera expresión en este caso <p ng-if="::test.name && test.blah">testing with first expression as one time binded</p> , sin embargo, cuando trato de usar un enlace de una sola vez en más de una expresión junto con un operador de guardia me arroja un error como error de sintaxis:

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? 

¿Es esto un error o un error de sintaxis genuino? Estoy usando la versión 1.3.14 de angularjs.

Comentario más útil

Creo que debería usar () para enlaces puntuales con expresiones, por ejemplo: <p ng-if="::(test.name && test.blah)">testing with first expression as one time binded</p>

Todos 3 comentarios

Creo que debería usar () para enlaces puntuales con expresiones, por ejemplo: <p ng-if="::(test.name && test.blah)">testing with first expression as one time binded</p>

@piernik Gracias funciona a las (::test.name) && (::test.blah) pero parece que el primer :: activa una sola vez. : +1:

El enlace único (: :) se aplica a todas las expresiones utilizadas en ng-if.
<p ng-if="::test.name && test.blah"> is same as <p ng-if="::(test.name && test.blah)">

Desafortunadamente, no podemos mezclar enlaces de una sola vez con expresiones de enlace unidireccionales en una sola expresión en js angular.

¿Fue útil esta página
0 / 5 - 0 calificaciones