İfadeler için açısal tembel tek seferlik bağlama


93

AngularJS, 1.3.0-beta.10 sürümünden beri yeni bir özelliğe sahiptir: "tembel tek seferlik bağlama" .

Basit ifadelerin önüne ::açısal ifade ilk değerlendirildikten sonra izlemeyi bırakması söylenebilir . Verilen yaygın örnek şuna benzer:

<div>{{::user.name}}</div>

Aşağıdakiler gibi ifadeler için benzer bir sözdizimi var mı?

<div ng-if="user.isSomething && user.isSomethingElse"></div>
<div ng-class="{classNameFoo: user.isSomething}"></div>

Ayrıntılı bir açıklama için açısal belgelere bakın: docs.angularjs.org/guide/expression#one-time-binding
Akshay Gundewar

Yanıtlar:


160

Evet. Sen her ifadelerini öneki ::, hatta olanları ngIfya ngClass:

<div ng-if="::(user.isSomething && user.isSomethingElse)"></div>
<div ng-class="::{classNameFoo: user.isSomething}"></div>

Aslında, kod basitçe ifadedeki ilk iki karakterin :tek seferlik bağlamayı etkinleştirmek için olduğunu kontrol eder (ve sonra onları kaldırır, böylece paranteze gerek kalmaz). Diğer her şey aynı kalır.


3
Soruma cevap veriyor, ancak bazı yeni özellikler iyi çalışmıyor: <div ng-if="::user.isSomething"></div>ve <div ng-if="::(!user.isSomething)"></div>her ikisi de işliyor. "::" olmadan çalışır.
seldary

@seldary Sorunu yeniden oluşturamıyorum. Ön eki olan her ifade ::, düzenlememde açıklandığı gibi benim için iyi çalışıyor. Şüpheniz varsa keman yapabilir misiniz?
Blackhole

7
İlk başta, tanımlanmış çoklu sınıflara sahip ngClass ile benim için de işe yaramadı. Bağlamanın hala bağlı olduğunu anladım çünkü ngClass'ta kullanılan bazı izlenen değişkenler henüz tanımlanmamıştı (ve açının, izleyiciyi bırakmadan önce değerin tanımlanmasını bekleyeceğini biliyoruz). İşte bu davranışı göstermek için küçük bir keman . Jsfiddle.net/2LkyLoop .
Denis Pshenov

1
@MaxRocket bindonce sözdizimi açısal 1.3'e eklendi. Yani 1.2 veya daha düşük
sürümlerde

2
Bir kerelik ng-if bağlaması işe yaramıyor gibi görünüyor. İzleyici sayısı ::. Ng sınıfı için iyi çalışıyor, ancak ng-if benim için tek seferlik bağlanmaya uymuyor (1.5.6). Bir ng-tekrarından gelen bir nesne özelliğini tek yönlü bağlamaya çalıştığımı unutmayın. Bunun bir fark yaratıp yaratmayacağından emin değilim.
AgmLauncher
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.