Angular.js: Die Verwendung mehrerer einmal gebundener Ausdrücke in ng-if führt zu einem Fehler

Erstellt am 22. März 2015  ·  3Kommentare  ·  Quelle: angular/angular.js

Ich habe meinen Code wie folgt:

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>

Ich versuche, ein <p> Tag mit einer ng-if-Bedingung anzuzeigen, in der die name-Eigenschaft einmalig gebunden werden soll. Ich weiß schon, dass es sich nicht ändern wird, wollte also einmal die Bindung in ng-wenn auch versuchen. Es funktioniert perfekt, wenn ich keine einmalige Bindung verwende oder wenn ich in diesem Fall nur eine einmalige Bindung mit dem ersten Ausdruck verwende <p ng-if="::test.name && test.blah">testing with first expression as one time binded</p> , jedoch versuche ich, eine einmalige Bindung in mehr als einem Ausdruck zu verwenden, gekoppelt mit ein Wachoperator wirft mir Fehler als Syntaxfehler:

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? 

Ist das ein Bug oder ein echter Syntaxfehler? Ich verwende anglejs-Version 1.3.14.

Hilfreichster Kommentar

Ich denke, Sie sollten () für pünktliche Bindungen mit Ausdrücken verwenden, z. B.: <p ng-if="::(test.name && test.blah)">testing with first expression as one time binded</p>

Alle 3 Kommentare

Ich denke, Sie sollten () für pünktliche Bindungen mit Ausdrücken verwenden, z. B.: <p ng-if="::(test.name && test.blah)">testing with first expression as one time binded</p>

@piernik Danke funktioniert wie ein Zauber. Ich habe (::test.name) && (::test.blah) versucht, aber es scheint, als würde das allererste :: eine einmalige Bindung aktivieren. :+1:

einmalige Bindung (::) gilt für alle Ausdrücke, die innerhalb von ng-if verwendet werden.
<p ng-if="::test.name && test.blah"> is same as <p ng-if="::(test.name && test.blah)">

Leider können wir einmalige Bindungen nicht mit Einwegbindungsausdrücken in einem einzigen Ausdruck in Angular js mischen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen