2

Boole işleçlerinin bildirildiği sırayı hangi etkisi var?AngularJs boolean işleçleriyle değerlerin tek seferlik bağlanması ve sırasının sırası

Kontrol:

$scope.show = false; 

$scope.clickMe = function() { 
    $scope.show = true; 
    $scope.name = 'Name defined' 
}; 

Şablon: tuşuna sonra görüntülendiği name && show sırasına ikinci p öğesinde

<button ng-click="clickMe($event)">Click Me</button> 
<p ng-if="::(show && name)">show && name</p> 
<p ng-if="::(name && show)">name && show</p> 

sonuçları. p öğesinin ne $scope.show olarak görüntülenmesi gerektiğini zaten tanımladı ve bir kez bağlama kullanılmış? Burada

plunkr: Bir sivil undefined değere sahiptir kadar Eğik olarak

http://plnkr.co/edit/P0E1RhNK9EPh2Pi04c9T?p=preview

+0

belki $ kapsamı.şimdi tanımlanmadı? 'Name undefined' için $ kapsam adını yazmanız durumunda ne olacak? – Walfrat

cevap

3

, bir kez bağlama ifadesi değerlendirmek sürekli olacaktır. Bu nedenle, örneğinizde, ad henüz tanımlanmadığı için, name && show, her seferinde sonuna kadar undefined sürekli olarak değerlendirir. Bir boole dosyasına zorlamak için !! kullanırsanız, farklı davranışlar elde edersiniz. Angular docs on expressions kaynaktan:

sonra olur stabil bir kez ifadeler yeniden hesaplama durur Tek zaman, ekspresyon sonucu olmayan tanımlanmamış değer (aşağıdaki değeri stabilizasyon algoritması bakınız) eğer ilk sindirimi.

yüzden kendi başına bir kere değerlendirmek değil, bu kez bir değere için değerlendirir.

+0

Cevabınız için teşekkür ederiz. Sanırım bu genel bir javascript sorusu. Neden && show === undefined' ve 'show &= name 'ismini göstermiyor – JimmyBob

+0

' && 'operatörü bir booleanı değerlendirmiyor, sol tarafın falsey olması durumunda, bunu döndürür, aksi takdirde sağa döner el tarafı. Yani 'undefined && false' undefined' iken 'false && undefined' false' dir. Eğer isminiz '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' = '' '' '' '' '' '' '' '' '' '' 'aynı davranır – Scott

+0

[Mantıksal işleçler için MDN belgeleri] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators) çok kapsamlı ve açıklamamdan çok daha iyi. – Scott

İlgili konular