SORU
16 ŞUBAT 2013, CUMARTESİ


Bir yönerge yazarken, nasıl bir yeni bir kapsam, yeni bir alt kapsamı, ya da izole yeni bir kapsam gerekiyorsa karar verebilirim?AngularJS :

Yeni bir Direktif yazarken kullanmak için hangi belirlemek yardımcı olmak için kullanabileceğiniz bazı ipuçları arıyorum. İdeal olarak, istiyorum da benzer bir şey için bir akış şeması o yürür ama bana bir sürü soru ve dışarı çıkar doğru cevap-hayır, yeni bir kapsam, yeni bir alt kapsamı, veya yeni izole kapsam-ama büyük olasılıkla sorduğun için çok fazla. İşte kurallar geçerli değersiz benim set:

  • eğer Yönerge kullanır kullanacak olan element-model ng eğer bir kapsam kullanın izole etme
    ngModel and component with isolated scope bkz
    Why formatters does not work with isolated scope?
  • eğer yönergesi model özellikleri/herhangi bir kapsam değiştir değilse bile, yeni bir kapsam oluşturmak yok
  • izole kapsamları gibi gözüküyor Peki eğer bir yönerge, şifrelenmiş bir dizi DOM elemanları (docs say "karmaşık DOM yapısı") ve Direktif olarak kullanılacak bir öğe, ya da başka direktifler aynı eleman

Bunun farkındayım kullanarak bir yönerge ile izole kapsamında bir element güçleri tüm diğer yönergelerin aynı eleman aynı (tek) izole kapsamı, çok değil, bu ciddi bir şekilde sınırlamak izole kapsamında kullanılabilir mi?

Açısal-UI takımı (veya birçok Yönerge yazdım başkaları) bazı deneyimlerini paylaşmak olacağını umut ediyorum.

Lütfen basit bir cevap katmayan bir "yeniden kullanılabilir bileşenler için kapsam izole kullanın".

CEVAP
16 ŞUBAT 2013, CUMARTESİ


Ne kadar harika bir soru! İstiyorumaşkbaşkaları ne diyecek, ama burada kurallar kullanıyorum.

Yüksek irtifa öncül: kapsam "ana denetleyicisi, Yönerge ve Yönerge şablon arasında iletişim kurmak için kullanırız." tutkal olarak kullanılır

Üst Kapsam:scope: false, yeni bir kapsam yani

Eğer herhangi bir Direktif kapsam değişkenleri (ve tabii ki herhangi bir set yok!) erişim yok eğer bu çok sık, ama @MarkRajcok dedi, kullanmıyorum o zaman bu güzel endişeliyim kadarıyla. Bu da alt direktifleri için yararlıdırsadeceana Yönerge kapsamında kullanılan her zaman bu kadar istisnalar olsa da) ve bir şablon yok. Temelde bir şablon ile bir şey doğal olarak erişim ve manipülasyon (ama bu kuralın istisnaları vardır eminim) bu kapsam teşhir çünkü bir kapsam paylaşımı buraya ait değil.

Örnek olarak, geçenlerde yazmakta olduğum (statik) bir vektör grafik SVG bir kütüphane kullanarak çeken bir yönerge hazırlandı. $observeiki öznitelik (width height) ve hesaplamalarında o kullanır, ama kendisi herhangi bir kapsam değişkenleri ayarlar okur ve hiç bir şablonu vardır. Bu başka bir kapsam yaratmak için değil, iyi bir senaryo; bir ihtiyacımız yok, o zaman neden rahatsız?

Ama başka bir SVG Direktifi, ancak, veri kümesi kullanmak için gerekli ve ayrıca devletin bir nebze saklamak zorunda kaldı. Bu durumda, ana kapsamı kullanan sorumsuz (yine genelde) olur. Bunun yerine...

Alt Kapsam:scope: true

Çocuk bir kapsam ile direktifleri bağlam-farkında ve geçerli kapsamı ile etkileşim için tasarlanmıştır.

Belli ki, bir anahtar avantajı, bu bir izole kapsamı kullanıcı için ücretsiz kullanım aradeğerleme herhangi öznitelikleri istiyorlar; örneğin kullanarak class="item-type-{{item.type}}" bir yönerge ile izole kapsam çalışmaz varsayılan olarak, ama gayet iyi çalışıyor tek bir çocuk kapsam, çünkü ne olursa olsun, aralıklı olabilir hala varsayılan olarak bu ana kapsamı. Ayrıca, direktifin kendisi güvenle kirliliği hakkında endişe veya üst zarar vermeden kendi kapsamı bağlamında nitelik ve ifadeleri değerlendirebilir.

Örneğin, bir ipucu sadece diğer direktifler veya aralıklı öznitelikleri burada kullanacağız beklendiği için; bir kapsam işe yaramaz izole eklendi (varsayılan olarak, aşağıya bakınız) alır. Araç ipucu sadece bir gelişmedir. Ama ipucu da ihtiyaçları için ayarlanmış bazı şeyler scope ile birlikte bir alt Yönerge ve/veya şablon ve açıkçası yönetmek için kendi devlet, öyle olması çok kötü gerçekten kullanmak için ana kapsamı. Ya da kirletici veya zarar ve ne bueno.

Çocuk kapsamları daha sık izole veya üst kapsamları daha sonra iki tane daha.

Kapsam izole:scope: {}

Bu yeniden kullanılabilir bileşenler için. :-)

Ama cidden, bence "yeniden kullanılabilir bileşenler" "kendi kendine yeten bileşenleri". Niyet, belirli bir amaç için kullanılacak, diğer direktifler ile birleştirerek ya da DOM düğüm için diğer aralıklı nitelikleri doğal olarak mantıklı gelmiyor ekleyerek çok olmasıdır.

Daha belirli bir şey için gerekli bu tek başına bir işlevi olması koşuluyla, belirtilen nitelikleri değerlendirilmesi bağlamında ana faaliyet alanı; onlar da tek yönlü dizeleri ('@'), tek yönlü ifadeler ( ' & ' ) veya çift yönlü veri bağlantıları ('=').

Kendi kendine yeten bileşenleri, anlamı kendi kendine var çünkü diğer talimatlarına ve niteliklerini uygulamak için ihtiyacımız yapmaz. Onun tarzı kendi şablon tabi (gerekirse) ve uygun içerik transcluded (gerekirse). Bir kapsam da söylemek izole koyduk o kadar bağımsız ki: "bu bulaşmayın. Bu birkaç özellikleri ile tanımlanan bir API veriyorum."

İyi bir en iyi uygulama olarak bir çok şablon tabanlı bir şeyleri mümkün olduğunca Direktifi bağlantı denetleyici fonksiyonları dışında bırakmak. Bu "API gibi" yapılandırma noktası: direktifin kullanıcı sadece şablon! yerine başka bir sağlar İşlevleri aynı kaldı, ve kendi iç API asla dokunmadı, ama tasarım berbat ve uygulama için ihtiyacımız olan DOM edebiliriz. /bootstrap uıharikaPeki Peter, çünkü bunu yapmak için nasıl Ve Pawel müthiş bir örnek.

Kapsamları da transclusion ile kullanmak için ayırın. Sekmeler; ne olursa olsun, sadece tüm işlevselliği, ama onlariçindene istiyorlarsa bu sekme (ve bölmeleri yapmak bırakarak serbestçe üst kapsam içinde değerlendirilebilir. Sekmeleri açıkça kendi vardevlethangi ait kapsamı (etkileşim ile şablonu), ama devletin ilgisi yok bağlamında hangisi kullanılır - tamamen iç ne yapar bir sekme yönergesi tab yönergesi. Ayrıca, çok mantıklı sekmeleri ile herhangi bir diğer yönergeleri kullanmak için yapmaz. Sekmeler onlar ve biz zaten işlevi var!

Daha fazla işlevsellik veya transclude daha fazla işlevsellik Surround, ama Direktif zaten.

O @ProLoser onun cevabı ima gibi, kapsam izole bir bazı sınırlamaları (yani özellikler) etrafında yolu vardır dikkat etmelisiniz, dedi. Çocuk kapsam bölümünde, örneğin, olmayan bir kapsam kullanarak (varsayılan) yalıtmak kırma özellikleri hakkında aradeğerleme bahsettim. Ancak kullanıcı, örneğin, sadece class="item-type-{{$parent.item.type}}" kullanabilir ve bir kez daha çalışacak. Eğer öyleyse orada zorlayıcı bir sebep için kullanmak izole kapsamı üzerinde bir alt kapsam ama dert ediyorsun bu sınırlamalar, biliyorum ki geçici bir çözüm bulmak neredeyse hepsini gerekirse.

Özet

Yeni bir kapsam ile direktifleri salt okunur; tamamen (app iç yani onlar güvenilir ve jack dokunmayın. Çocuk bir kapsam ile direktiflerekleyinişlevselliği, ama değillertekişlevselliği. Son olarak, kapsamları tüm hedefi olan direktifler için; tek başına, bu kadar izole (ve en "") doğru onları rogue. gidelim

Benim ilk düşünceler dışarı çıkmak istedim, ama daha fazla şey düşünürüm olarak, bu güncelleriz. Ama kahretsin, bu YÜZDEN bir cevap için çok uzun


PS: Tamamen yüzeysel, ama beri konuşuyoruz kapsamları tercih ederim demek "prototip" ise Diğerleri tercih "ilk", galiba daha doğru ama hoş geliyor sayılmaz. :-)

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • graham025

    graham025

    25 NİSAN 2006
  • mahalodotcom

    mahalodotcom

    8 HAZİRAN 2007
  • Nightmare2005

    Nightmare200

    14 Ocak 2007