AngularJS ve Dolar Değişkenlerinin Kullanımı


128

AngularJS'de dolar yöntemlerinin ve değişkenlerinin kullanımının arkasındaki mantığın, bir sindirim devam ederken bu değerleri kontrol etmekten kaçınması için angularJS'ye talimat vermek olup olmadığını bilen var mı? Öyleyse, açısal karşımıza çıkarsa $scope.$valueve $scope.valueo zaman değişken adında bir dolar karakteri ön eki olduğu için öncekini kontrol etmekten kaçınır mı?


Angularjs'deki "$ kapsam" ve "kapsam" arasındaki fark hakkındaki bu blog gönderisine de bakın ...
MarcoS

19
Angular, muhtemelen jQuery'den $ almaya çalışıyor.
daniel1426

Bu bağlantı, $ kapsam hakkında pek bir şey açıklamayan bir sayfaya yönlendiriyor.
Paul Brannan

5
Yönerge için belgeler - denetleyici var $scope, ancak yönergede var scope. O NE LAN?
LeeGee

Yanıtlar:


87

Birkaç kez Angular'ın önünde dolar işareti bulunan değişkenleri yoksayar:

  1. In Schumli yorumuyla , aşağıda nerede json filtreler çıkış bunları olmaz
  2. Yönergeyi kullanırken {{ }}, açısal, iç içe geçmiş $ değişkenleri göstermez . Örneğin, bu yalnızca visibleözelliği görüntüler .

    <div ng-init="n = { visible: 'foo', $ignore: 'bar' };">{{ n }}</div>
  3. Ek olarak, bir kapsam nesnesine açık bir izleyici eklerken, bu nesnenin başında dolar işareti olan özelliklerde yapılan değişiklikler, izleyiciyi tetiklemez. Bu güncellenmiş kemana bakın .

  4. angular.equals() ön ekli anahtarları yok sayar$ .


Evet, haklısın gibi görünüyor. Tıklama olayları vesaire olsa bile, yine de değişir. Teşekkür ederim.
matsko

7
Angular'ın önekli özellikleri yok sayan belirli kısımları vardır, örneğin 'json' filtresi '$' ile başlayan bir değişken vermez.
Schmuli

116

Bu, aşağıdaki ön bilgiden alınan bir adlandırma kuralıdır http://docs.angularjs.org/tutorial/step_05

'$' Önek Adlandırma Kuralı
Kendi hizmetlerinizi oluşturabilirsiniz ve aslında bunu 11. adımda yapacağız. Adlandırma kuralı olarak, angular'ın yerleşik hizmetleri, Kapsam yöntemleri ve diğer birkaç açısal API'nin bir '$' öneki vardır. ismin önünde. Olası ad çakışmalarını önlemek için hizmetlerinizi ve modellerinizi adlandırırken '$' öneki kullanmayın.

http://docs.angularjs.org/guide/concepts#angular_namespace

Açısal Ad Alanı
Yanlışlıkla ad çakışmasını önlemek için Açısal, $ ile potansiyel olarak çakışabilecek nesnelerin adlarını ön ekler. Yanlışlıkla Açısal kod ile çakışabileceğinden, kodunuzda $ ön ekini kullanmayın.


2
Neden doc [1] yönergesi $scopedenetleyicide ama scopeyönergede var? --- [1] docs.angularjs.org/guide/directive
LeeGee

2
@LeeGee Bu sadece bir kongre. stackoverflow.com/a/19289054/114558
rinogo

30

$Öneki köşeli çekirdeğine ait bir değişken parametre, özelliği, veya yöntemi temsil eder.

Çerçeve içinden kaynaklanan, ancak gerçekte API'nin parçası olmayan nesneler üzerindeki özellikler, özel bir yöntemi veya özelliği belirtmek için $- veya hatta $$- ile başlayabilir . Bu, önekin diğer kitaplıklarda sıklıkla kullanıldığı yolla aynıdır ._

Kodun çalışma zamanı tarafından yorumlanma şekli üzerinde herhangi bir etkisi yoktur, ancak çerçevenin kendisi ona özel bir anlam verebilir. Temel olarak, "Bununla uğraşmamalısın" diyen bir adlandırma kuralıdır.


Sanırım yanlış anladınız. Çalışma zamanı , hangi değişkenlerin adlandırıldığını umursamaz. Onu çağırabilirsiniz $$__$_$- bu sadece yorumlayıcı için özel bir anlamı olmayan bir tanımlayıcıdır.
dalgard

Çalışma zamanı ve çerçeve arasındaki farkı vurgulamak için birkaç kelime ekledim; oyunuzu değiştirecek kadar nazik olun.
dalgard

7

Tam olarak emin değilim, ancak AngularJS dahili bileşenlerinin özet sırasında bu $ önekli değişkenleri değiştirmeye dayandığına inanıyorum. Bu değişkenlerin kontrol edilmesi, sindirimin her döngüsü sırasında sürekli değişebileceklerinden, sindirimin asla stabilize olmayacağı anlamına gelir.

Yine de benden alıntı yapma. :)


10
"Benden alıntı yapma" nedeniyle olumsuz oy verildi. Üzgünüz, ancak belirsizliği kabul eden bir cevap pek kullanışlı değildir :(
David Rivers

2
Olumsuz oy, yukarı-. Haklı olduğunuzu varsayarsak, bu artık faydalı bir cevap!
David Rivers

2
@DavidRivers, cevap başlangıçta tereddütlü geldiyse, yeniden yazmak onu daha kullanışlı hale getirmeyecektir. Aslında, cevap yanlış olabilir ve tereddüt eksikliği potansiyel yanlışlığı ortaya koyabilir . Bunun yerine, bu cevabın yararlı sayılması için, güvenilir kaynaklardan alıntı yapılarak bazı kanıtlarla desteklenmeli veya ifade edilen noktaları yeniden üretecek bir keman sunmalıdır.
Ivaylo Slavov

1
@IvayloSlavov: Size kesinlikle katılıyorum. Cevaplayanın haklı olduğunu iki kez kontrol ettiğini ve belirsizliği gidermek için cevabı yeniden ifade etmediğini (muhtemelen yanlış bir şekilde) varsaydım. Sanırım kaynak veya keman istemeliydim.
David Rivers

1
@AlexFord: Merhaba dostum. Özür için teşekkürler! Üzgünüm, net olamadım ve yine de bütün bu yanlış iletişimi başlattım. Puanınız geçerli ve size katılıyorum. Yanlış tanıtılmadığımdan emin olmak istedim, ancak kendi ifadelerim konusunda net değildim. Her neyse, sert duygular yok ve bakış açımı görebildiğine gerçekten saygı duyuyorum. Şerefe ahbap!
David Rivers

5

Her zaman $servis için "S" ye benzediğini düşünmüşümdür .


bu doğru cevap. Mantıklı ve basit. Bunlar gerçekte hizmetlerdir, bu nedenle $ 'S'nin hizmet için olduğunu hatırlamak daha iyidir. güzel, basit bir açıklama.
Yonk

2
$ kapsam bir hizmettir?
17'de

5

Dolar ( $ ) işaretleri ayrıca öğelerin belirli direktiflerde yinelenmesini (veya yorumlanmasını) engeller. Örneğin, $ ile başlayan özellikler , for döngüsündeki bir if cümlesing-repeat nedeniyle kullanılmaz :

if(collection.hasOwnProperty(key) && key.charAt(0) != '$')

Birisi angulars github sayfasında konuyla ilgili bir sorun yaptı


$$ ile shallowCopybaşlayan yöntemde özellikler , properies yinelenirken bir if cümlesi nedeniyle atlanır :

if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {

1

@MarcoS, $ kapsam ve kapsam arasındaki farkı açıklayan https://thinkster.io/a-better-way-to-learn-angularjs/scope-vs-scope bağlantısını sağladı . Bunu, diğer yanıtlardaki bilgilere ekleyerek faydalı buldum.

Açısal bir yönergede bir bağlantı ve denetleyici vardır. Bağlantı, sabit bir parametre kümesine sahip standart bir işlevdir: kapsam, öğe, öznitelikler nesnesi.

Kontrolörün argümanları Angular enjektör tarafından yönetilir ve sıraya bağlı değildir. Enjektör, $ ile başlayan parametreleri arayarak hangi nesnelerin geçeceğini çözer.

Https://thinkster.io/a-better-way-to-learn-angularjs/scope-vs-scope yazarı bunu açıklamakta daha iyi bir iş çıkarıyor.


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.