SORU
17 Mayıs 2013, Cuma


Nerede Devlet Modeli Angular.js Saklanmalıdır

Modellerin Açısal kullanımı kafa karıştırıcı buluyorum. Köşeli bir model - I. E. Açısal açık model bir sınıf içermez gibi bir şey olabilir yaklaşım gibi görünüyor ve model olarak vanilya JavaScript nesneleri kullanabilirsiniz.

Gördüğüm hemen hemen her Açısal örneği, modeli, el tarafından oluşturulan ya da etkili bir nesnedir, ya da bir Kaynak üzerinden bir API çağrısı döndü. Çünkü hemen hemen her Açısal örnek baktım en basit, genellikle model veri depolanan $kapsamda denetleyicisi ve herhangi bir devlet ile ilgili model, örneğin seçimi, de kayıtlı $kapsamda denetleyicisi. Bu örnekler/basit uygulamalar için iyi çalışır, ancak bu uygulamalar daha karmaşık hale ne zaman basite indirgemek gibi geliyor. Model devletin saklı bir denetleyicisi ciddi bir risk haline bağlamsal kaybolmak eğer içerik değiştirir, örneğin; Bir denetleyiciye selectedGallery selectedPhoto Tek mağaza genel selectedImage, selectedPhoto başına Galerisi. Böyle bir durumda, Galeri başına bir denetleyici kullanarak bu sorunu inkar olabilir, ama UI açıdan gereksiz ve yersiz ve gereksiz muhtemelen gibi görünüyor.

Modellerin açısal tanımı aptal bir nesne sunucu ve istemci arasında geçen VO/DTO düşünün ne daha yakın görünüyor. Benim içgüdü kaydır bir cismin ne olurdu düşünün bir Model - bir sınıf savunuyor durumuna ilişkin DTO/VO (seçim), fazla mutators gerektiği gibi işlemek için DTO/VO, ve bildirir gerisini uygulama değişiklikleri için temel veri. Tabii ki bu son kısmı güzel bakım Açısal bağlarını tarafından alınır, ama yine de kullanmak durumunda ilk iki sorumluluk için güçlü bir bakın.

Ancak gerçekten baktım bu model örneklerde kullanılan görmedim, ama ne var kullanmalarına olanak alternatif bir düşünün ne gördüm. Açısal örtülü olarak Tekiz (bu etrafında almak için yolu vardır biliyorum, ama yaygın olarak kullanılan veya onaylanmış görünmüyorlar) zorlayarak model olarak kullanarak Hizmetleri vazgeçirmek gibi görünüyor.

Nasıl örnek veriler üzerinde devlet takip etmeli miyim?

[Değiştir] this question ikinci cevap ilginçtir ve şu anda kullanıyorum ne yakın.

CEVAP
1 Mayıs 2014, PERŞEMBE


Devlet (ve model) kapsamında $saklanır

kapsam Açısal veri depolama nesnesidir. $ Bir veritabanına benzer. kapsam modelin kendisi değil dolar, ama modeller $kapsam saklayabilirsiniz.

Kapsam her $olan gevşek DOM yansıtan bir ağaç yapısı oluşturma kapsamında, sonuna kadar $rootScope bir ebeveyn $. Kapsam, ng-kontrol gibi yeni bir $gerektiren bir Direktif aradığınızda, kapsam nesne yeni bir $oluşturulacak ve ağaç ekledi.

kapsam nesneleri prototip miras kullanmayı bağlı. $ Bu ağaç daha üst düzeyde bir model eklerseniz, tüm alt katlarda mevcut olacağı anlamına geliyor. Bu kapsam hiyerarşi $şablon yazar için neredeyse şeffaf kılan olağanüstü güçlü bir özelliktir.

Kontrolörler kapsamında yeniden dolar

Denetleyici amacı, kapsamı yeniden dolar. Aynı kumanda sayfanın farklı yerlerinde kapsam nesneleri birçok $başlatılamıyor. Denetleyici örneği, kapsam nesne $ayarlar ve sonra çıkar. Sayfanın farklı yerlerinde birçok kapsamları $başlatmak için aynı kumanda kullanabilirsiniz.

Resim Galerisi durumda, daha sonra bir galeri ng-kontrol yönergesini kullanarak almak istediğiniz DOM her bir kısmı için geçerli olacak olan imageGallery denetleyicisi olurdu. Sayfanın o kısmını değil selectedPhoto özniteliği saklamak için kullandığınız kapsamında, kendi $alacak.

Prototip kapsamları

kapsam üst düz eski prototip miras tüm yol $rootScope kadar kullanarak devralır, nesneleri her yerde mantıklı hiyerarşisi üzerinde saklayabilirsiniz$. Bir ağaç kabaca geçerli DOM ile ilgili kapsamlı nesneler $olsun. Kapsam DOM değişiklikleri yeni $eğer gerekli nesneleri olarak sizin için oluşturulur.

kapsam sadece düz bir JavaScript nesnesidir. $ Artık savurgan birden çok currentİmage nesneleri içeren bir dizi oluşturmak için olacağını daha kapsamlı nesneler $oluşturabilirsiniz. Kodunuzu düzenlemek için mantıklı bir yol.

Bu şekilde Açısal eski "nerede benim veri" sık sık JavaScript bulmak sorun. mağaza yapmak mı uzak Açısal aldığımız çok büyük verimlilik artışları bir kaynak.

Var genel veriler (örn. bir kullanıcı kimliği)? $rootScope üzerinde saklayın. Yerel veri (örn. birden fazla Galeri örneklerini bir galeri) currentİmage? Bu galeriye ait kapsam nesne $üzerinde saklayın.

kapsam şablonun doğru bölümünde sizin için otomatik olarak kullanılabilir. $

Açısal modelleri ince

Yağ modelleri ve sıska denetleyicileri üzerinde durmaktayız nerede Raylar bir arka plan gelen, 'zar zor' modelleri şaşırtıcı. Açısal buldum Aslında, koyarak çok iş mantığı modelinizi sık sık yol açar sorunları aşağı satır, bazen görmek ile Kullanıcı modeli Raylar, komaya giriyorsun, büyüyecek kadar olur unmaintainable.

Köşeli bir model sadece JavaScript bir nesne ya da ilkel.

Herhangi bir nesneyi bir model olabilir. Modelleri genellikle denetleyicisi JSON kullanarak, ya da bir sunucudan AJAXed tanımlanır. Bir model JSON bir nesne olabilir, ya da sadece bir dize, dizi, hatta bir sayı olabilir.

Elbette, bir şey yok dur ekleme ek işlevler için model ve saklamak onları JSON nesnesi istiyorsanız, ama bunun için taşıma bir paradigma yok mu gerçekten uygun olan Açısal.

Açısal nesneler genellikle veri depoları, fonksiyonlar değil.

Ön ucunda modeli gerçek bir model değil

Elbette istemci verdiğiniz modeli gerçek bir model değil. Gerçek model, gerçeğin tek kaynak sunucu üzerinde yaşıyor. Bu bir API kullanarak ayarlayalım, ama eğer ikisi arasında bir çatışma varsa, veritabanında modeli belli ki nihai zafer.

Bu indirim kodları, vb gibi şeyler için gizlilik sağlar. Bulduğunuz model ön sonunda uzak olan gerçek modeli, ortak özellikleri senkronize bir versiyonu.

İş mantığı hizmetleri yaşayabilir.

Modeliniz için bir şeyler yap, senkronize, ya da örneğin bunu doğrulamak için bir yöntem yazmak istiyorum ki. Diğer çerçeveler içinde bunu yapmak için bir yöntem ile model genişletmek için cazip olabilir. Köşeli bir servis yazmak için daha muhtemel olacaktır.

Hizmetleri tek nesneleridir. Başka bir JavaScript nesne gibi işlevleri veya veri koyabilirsiniz. Açısal $http gibi inşa hizmetleri bir sürü ile birlikte geliyor. Kendi inşa ve bağımlılık enjeksiyonu otomatik olarak denetleyicileri için bunları sağlamak için kullanabilirsiniz.

Bir hizmet yöntemleri örneğin Dinlendirici bir API konuşmak içerebilir, veya verileri veya diğer herhangi bir iş doğrulamak için yapmak gerekebilir.

Hizmet modelleri

Elbette model olarak hizmet kullanmamalısın. Şeyler yapabilirsiniz hangi nesneler olarak onları kullanın. Bazen senin model için bir şeyler yaparlar. Düşünmenin farklı bir yolu, ama bir çalışılabilir.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • How It Should Have Ended

    How It Shoul

    5 Mart 2007
  • UnboxTechnology

    UnboxTechnol

    20 Ocak 2011
  • whiteboy7thst

    whiteboy7ths

    1 Temmuz 2009