2015-07-10 19 views
14

Bu, gerçek bir noob sorusu gibi gelebilir, ancak MVVM'ye veya JS'deki MVC'ye oldukça yeniyim, bu yüzden çok üzgünüm.İç içe geçmiş vue.js örnekleri/öğeleri

vue.js ile oynuyorum ve şu ana kadar basitliğini seviyorum. Ama yapmaya çalıştığım şey için bunun farklı bir yoldan gitmem gerektiğini düşünüyorum.

Vue örneklerini/öğelerini birbirinin içine yerleştirmek istiyorum, ancak tabi ki ebeveyn, init'te DOM üzerinden okurken çocuğu kullanacaktır. argümanlar uğruna

, aşağıda ne demek, ben böyle bir şey yapmıyorum bir örnektir, ama bu en basit demek istediğimi örneğe yoludur: Sonra

<body> 
    {{ message }} 
    <div id="another"> 
     {{ message }} 
    </div> 
</body> 

benim JS için örnek olacaktır:

new Vue({ 
    el: "body", 
    data: { 
     message: "I'm the parent" 
    } 
}); 

new Vue({ 
    el: "#another", 
    data: { 
     message: "I'm the child" 
    } 
}); 

sonucu olacaktır:

<body> 
    I'm the parent 
    <div id="another"> 
     I'm the parent 
    </div> 
</body> 

Şimdi tamamen understa Bunu neden yapıyor ve aslında bunu yapmalı, ama benim örneğim böyle bir şeyi nasıl yapacağımı göstermeye çalışıyor?

Gerçek hayattaki projemde, vücudumda bir şeyler olduğunda (birçok yerde) değişen vücudumda bir v-sınıfım var, ama elbette vücudum başka şeyleri yapan başka vue örneklerini de isteyecek.

Yuvalama hakkında nasıl giderim? Bununla başa çıkmak için vue özelliği var mı? Bileşenlerle ilgilenmem gerekiyor mu? Ya da, belki de, bir çocuk elemanının içinden vücudu getirin (örneğin, jQuery gibi $ ("body") ile olur) ve sonra Vue örneğinde manipüle edin? Umarım bu soru çok aptal değildir ve birisi beni doğru yöne yönlendirebilir.

Teşekkürler

cevap

3

Veriler aracılığıyla veri aktarımı, bunu yapmanın sadece bir yoludur. Yuvalama bileşenleri ve ana öğeden devralmak da iyi çalışır.

Örnek: http://jsfiddle.net/hajkrupo/3/

<encapsulated-component inline-template> 
    <header> 
     <cart-status></cart-status> 
    </header> 
    <cart></cart> 
</encapsulated-component> 
0

Sen <slot> etiketleri ile bunu yapabilirsiniz. İşte bir örnek.

1.İlk önce yapmanız gereken, bunun gibi temel bir düzen bileşeni oluşturmaktır. İstediğiniz yerde <slot> etiketini eklemeniz gerekiyor. Çok önemli bir düşünce, <slot> etiketindeki adının ismidir.

2.Özel bileşeninizi oluşturun. Size nasıl çalıştığını göstermek için myHeader bileşenini oluşturdum.Bu örnek kodu HTML dosyanıza yapıştırın. 3. Bu örnek kodu HTML dosyanıza yapıştırın. Geçerli yuvaya bazı içerik koymak için, bileşeninizdeki veya etiketinizdeki slot özniteliğini kullanmanız yeterlidir.

<div class="app"> 
    <basic-layout> 
     <my-header slot="header"></my-header> 

     <p>Content in &lt;main&gt; tag</p> 

     <p slot="footer">Content in footer</p> 
    </basic-layout> 
</div> 

4.The sonuç böyle olacaktır:

<div class="app"> 
    <div class="basic-layout"> 
     <header> 
      <div class="header"> 
       <ul> 
       <li>HOME</li> 
       <li>ABOUT</li> 
       <li>CONTACT</li> 
       </ul> 
      </div> 
     </header> 

     <main> 
     <p>Content in &lt;main&gt; tag</p> 
     <main> 

     <footer> 
      <p>Content in footer</p> 
     </footer> 
    </div> 
</div> 

, sadece daha fazla bilgi için bağlantıyı here tıklayın Vue.js resmi sayfasında belgelerine bakın.

Örnek olarak jsfiddle