VueJ'ler bir bileşen içinde bir öğe alıyor


117

Bir bileşenim var, bileşenlerinden birini nasıl seçebilirim?

Bu bileşenin şablonunda bulunan bir girdi almaya çalışıyorum.

Birden fazla bileşen olabilir, bu nedenle sorgu seçici yalnızca bileşenin geçerli örneğini ayrıştırmalıdır.

Vue.component('somecomponent', {
    template: '#somecomponent',
    props: [...],

   ...

    created: function() {
        somevariablehere.querySelector('input').focus();
    }
});

Şimdiden teşekkürler

Yanıtlar:


113

ile bir vuejs bileşeninin alt öğelerine erişebilirsiniz this.$children. geçerli bileşen örneğinde sorgu seçiciyi kullanmak istiyorsanızthis.$el.querySelector(...)

sadece basit bir işlem yapmak console.log(this)size bir vue bileşeni örneğinin tüm özelliklerini gösterecektir.

ayrıca, bileşeninizde erişmek istediğiniz öğeyi biliyorsanız, v-el:uniquenameyönergeyi ona ekleyebilir ve şu yolla ona erişebilirsiniz:this.$els.uniquename


6
İpucu: this.$elbağlanana kadar tanımsızdır. Bir değişkeni başlatabilir istiyorsanız bunu yapmakmount()
Wedi

167

vuejs 2

v-el:el:uniquenameile değiştirildi ref="uniqueName". Öğeye daha sonra erişilir this.$refs.uniqueName.


1
Bu, refniteliğin herhangi bir HTML öğesi veya Vue bileşeni üzerinde çalıştığını anlamama yardımcı oldu . İyi şeyler.
C. Bess

3
Şöyle görünüyor. $ Refs.uniqueName bir dizi, bu yüzden başvurulan elemanı almak için buna ihtiyacınız var. $ Refs.uniqueName [0].
Nicolas S.Xu

sadece montaj bileşeninden sonra, ebeveynin monte yönteminde yapılabilir: medium.com/@brockreece/…
Yordan Georgiev

47

Cevaplar netleştirmiyor:

Kullanın this.$refs.someName, ancak kullanmak için üst öğe eklemenizref="someName" gerekir .

Aşağıdaki demoya bakın.

new Vue({
  el: '#app',
  mounted: function() {
    var childSpanClassAttr = this.$refs.someName.getAttribute('class');
    
    console.log('<span> was declared with "class" attr -->', childSpanClassAttr);
  }
})
<script src="https://unpkg.com/vue@2.5.13/dist/vue.min.js"></script>

<div id="app">
  Parent.
  <span ref="someName" class="abc jkl xyz">Child Span</span>
</div>

$refs ve v-for

İle bağlantılı olarak kullanıldığı zaman o Uyarı v-for, this.$refs.someName bir dizi olacaktır:

new Vue({
  el: '#app',
  data: {
    ages: [11, 22, 33]
  },
  mounted: function() {
    console.log("<span> one's text....:", this.$refs.mySpan[0].innerText);
    console.log("<span> two's text....:", this.$refs.mySpan[1].innerText);
    console.log("<span> three's text..:", this.$refs.mySpan[2].innerText);
  }
})
span { display: inline-block; border: 1px solid red; }
<script src="https://unpkg.com/vue@2.5.13/dist/vue.min.js"></script>

<div id="app">
  Parent.
  <div v-for="age in ages">
    <span ref="mySpan">Age is {{ age }}</span>
  </div>
</div>


1
Ayrıca yeniden doldurulan öğelerin reaktif OLMADIĞINI unutmamak önemlidir.
Pithikos

38

In vue2 Erişebildiğiniz unutmayın bu. $ Refs.uniqueName sadece bileşeni montaj sonrasında.


2
Vue'nun yaşam döngüsüne monte edilmeden önceki her şey tarayıcınızda sunulmaz. Henüz bağlanmadığından, DOM kullanılabilir bir denetim yoktur.
Coreus


1

Kompozisyon API'si

Şablon referansları bölümü bunun nasıl birleştirildiğini anlatır:

  • şablon içinde kullanın ref="myEl"; :ref=Birliktev-for
  • komut dosyası içinde, bir var const myEl = ref(null)ve onusetup

Referans, DOM elemanını montajdan itibaren taşır.

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.