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