Saya memiliki kode saya sebagai berikut:
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>
Saya mencoba menampilkan tag <p>
dengan kondisi ng-if di mana saya ingin properti nama diikat satu kali. Saya sudah tahu bahwa itu tidak akan berubah jadi ingin mencoba satu kali mengikat di ng-if juga. Ini berfungsi dengan baik ketika saya tidak menggunakan pengikatan satu kali atau ketika saya hanya menggunakan pengikatan satu kali dengan ekspresi pertama dalam hal ini <p ng-if="::test.name && test.blah">testing with first expression as one time binded</p>
, namun ketika saya mencoba menggunakan pengikatan satu kali di lebih dari satu ekspresi ditambah dengan operator penjaga itu memberi saya kesalahan sebagai kesalahan sintaks:
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?
Apakah ini bug atau kesalahan sintaksis asli? Saya menggunakan angularjs versi 1.3.14.
Saya pikir Anda harus menggunakan ()
untuk pengikatan tepat waktu dengan ekspresi mis.: <p ng-if="::(test.name && test.blah)">testing with first expression as one time binded</p>
@piernik Terima kasih bekerja seperti pesona. Saya mencoba (::test.name) && (::test.blah)
tetapi sepertinya ::
mengaktifkan pengikatan satu kali. :+1:
pengikatan satu kali (::) berlaku untuk semua ekspresi yang digunakan dalam ng-if.
<p ng-if="::test.name && test.blah"> is same as <p ng-if="::(test.name && test.blah)">
Sayangnya kami tidak dapat menggabungkan pengikatan satu kali dengan ekspresi pengikatan satu arah dalam satu ekspresi di angular js.
Komentar yang paling membantu
Saya pikir Anda harus menggunakan
()
untuk pengikatan tepat waktu dengan ekspresi mis.:<p ng-if="::(test.name && test.blah)">testing with first expression as one time binded</p>