Angular.js: Menggunakan beberapa ekspresi terikat satu kali di ng-if throws error

Dibuat pada 22 Mar 2015  ·  3Komentar  ·  Sumber: angular/angular.js

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.

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>

Semua 3 komentar

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.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat