2017-09-27 19 views
5

Gördüğüm gibi, bir bileşenin şekillendirilmesi için <div> kaplarının yerine kullanılabilir. Örnek:Kullanımı: ana makine seçici vs kapsayıcı bölmesi

kullanma konteyner

@Component({ 
    template: ` 
     <div class="container"> 
      <h1>Some Title</h1> 
      <p>Some Content</h1> 
     </div> 
    `, 
    styles: [` 
     .container { 
      border: 1px solid black; 
      display: flex; 
     } 
    `], 
}) 

Eğer doğru anlamak :host

@Component({ 
    template: ` 
     <h1>Some Title</h1> 
     <p>Some Content</h1> 
    `, 
    styles: [` 
     :host { 
      border: 1px solid black; 
      display: flex; 
     } 
    `], 
}) 

kullanarak, bu iki aynı sorunları çözmek. Ve hemen hemen her bir bileşende endişelenecek bir tane daha az elemente ve sınıfa sahip olmak güzel.

Sorular: :host bunun için uygun mu? Değilse, bunun anlamı nedir ve her yere konteyner eklemekten başka, bileşeninize stil vermek için en iyi yöntemler nelerdir?

+0

Haklısınız. : ana makine geçerli bileşene herhangi bir stil uygulamak için kullanılabilir. Bunun için bir sarıcı ve yazma stilleri de kullanabilirsiniz. Yani sadece bir tercih meselesi ve ihtiyacınıza göre. Bu sadece bir sarıcı ise, o zaman doğrudan ': host' için gidebilirsiniz. –

+0

@KiranDash Bu bir tercih meselesi değil, ana bilgisayardaki stilleri ayarlama, varsayılan olarak 'inline' bileşeninin varsayılan 'display 'özelliğini tanımlayabilir ve satır içi öğelerin içerisine blok öğeleri koymadan hiçbir anlam ifade etmez IMHO. – n00dl3

cevap

3

:host, ana makineyi şekillendirmek içindir ve .container, bileşeninizin içinde container sınıfına sahip herhangi bir div stili oluşturmak içindir.

.container div, ana makine öğesi stillenebilirken kapsülleme nedeniyle bileşeninizin dışındaki stil için kullanılamaz.

display özelliğinin başlangıç ​​değerinin inline olduğunu unutmayın, bu nedenle varsayılan olarak bileşeniniz inline öğesi olarak görüntülenir. Belki de bunu istemezsiniz, özellikle if you have a block element inside of it karşı sezgisel görünebilir (izin verilse bile).

+0

Gerçekten iyi cevap, özellikle 'display: block' kısmı. –

+0

Sanırım eşdeğer değiller, ama aynı problemi benim örneğimde çözüyorlar (şablonumdaki her şeyi saran '.container'ın yalnızca bir örneğini varsayıyorum)? 'display' hakkında iyi bir nokta olsa! Bu kesinlikle dikkate almadığım bir yan etki. Ayrıca @AdrianMoisa, kapsülleme hakkında bahsetti. ': host' seçicisinin ne anlama geldiğinden emin değilim, aksi takdirde bir '.container '/' .wrapper'/'my-component-name' /' dizinine girecek şeyler için değil. # whatever'. – Frigo

+0

'.container'ı bileşeninizin dışından stilleyemezsiniz (kullanımdan kaldırılmış'/deep/'seçici kullanmanın dışında). Ana makine elemanını stil haline getirebilirsiniz. Böylece, ana makine öğesini şekillendirmek, bileşeninize varsayılan stilleri koymanıza izin verir. – n00dl3

0

:host, sarıcı öğenizi geçerli bileşen için şekillendiriyor (örneğin <app-header> öğesi) ve bildiğim gibi, bu gibi öğelerin stilini oluşturmanın kısa ve rahat bir yoludur. Aynı sorunu çözmezler.

0

Ben de geçerli cevaplara aşağıdaki gözlemlerini katacak:

sınıf .container

  • Sınıfa her zaman arzu durumda senkronize halde tutmak zorunda daha .container kullanırsanız bileşenlerinizi yeniden adlandırın. Büyük uygulamalarda bu, gelişimin ilk aşamalarında sıklıkla gerçekleşir.
  • Ayrıca, özellikle iyi CSS hijyen alışkanlıklarınız yoksa, isim çarpışmaları için açılmanıza neden olur.
  • Öğe sınıfı özelliğinin üzerine yazılarak, çalışma zamanında yanlışlıkla silinebilir. element.classList.add(); .remove()

kullanın: konak

  • yedek size yazarak bir çok ihtiyacı (bazen bileşen isimleri uzun alabilirsiniz)
  • Size eleman eklemek hangi dersleri olursa olsun orada . Ayrıca .container sınıfında da önceliğe sahip olması gerektiğine inanıyorum.
  • (Yalnızca açısal) Açı, aynı davranışı öykünür, ancak bileşen kapsüllemesini devre dışı bırakırsanız, :host seçicilerin tümü kullanılamaz hale gelir ve bu da .container sınıfının kullanımına yol açabilir.
İlgili konular