컴포넌트 내에서 요소를 가져 오는 VueJ


117

구성 요소가 있습니다. 구성 요소 중 하나를 어떻게 선택할 수 있습니까?

이 구성 요소의 템플릿 내에있는 입력을 얻으려고합니다.

여러 구성 요소가있을 수 있으므로 queryselector는 구성 요소의 현재 인스턴스 만 구문 분석해야합니다.

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

   ...

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

미리 감사드립니다

답변:


111

.NET을 사용하여 vuejs 구성 요소의 자식에 액세스 할 수 있습니다 this.$children. 현재 구성 요소 인스턴스에서 쿼리 선택기를 사용하려면this.$el.querySelector(...)

그냥 간단하게 console.log(this) vue 구성 요소 인스턴스의 모든 속성이 표시됩니다.

또한 구성 요소에서 액세스하려는 요소를 알고 있으면 v-el:uniquename지시문을 추가하고 다음을 통해 액세스 할 수 있습니다.this.$els.uniquename


6
힌트 : this.$el마운트 될 때까지 정의되지 않습니다. 변수를 초기화하려면 다음에서 수행하십시오mount()
wedi

165

vuejs 2

v-el:el:uniquename이 (가)로 대체되었습니다 ref="uniqueName". 그런 다음을 통해 요소에 액세스합니다 this.$refs.uniqueName.


1
이것은 ref속성이 모든 HTML 요소 또는 Vue 구성 요소에서 작동 한다는 것을 깨닫는 데 도움이되었습니다 . 좋은 물건.
C. Bess 2017 년

3
this. $ refs.uniqueName이 배열 인 것처럼 보이므로 참조 된 요소를 가져 오려면 this. $ refs.uniqueName [0]이 필요합니다.
Nicolas S.Xu

부모의 마운트 방법으로 수행 할 수있는 마운팅 구성 요소 이후에만 : medium.com/@brockreece/…
Yordan Georgiev

45

대답은 명확하지 않습니다.

를 사용 this.$refs.someName하지만 사용하려면 상위 항목에 추가 해야합니다.ref="someName" .

아래 데모를 참조하십시오.

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>

$refsv-for

함께 사용할 때 공지 v-for의이 this.$refs.someName 배열 될 것이다 :

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
reffed 항목은 반응하지 않습니다.
Pithikos

38

Vue2 에서는 컴포넌트를 마운트 한 후에 만 this. $ refs.uniqueName에 액세스 할 수 있습니다 .


2
Vue의 수명주기에 마운트되기 전에 모든 것은 브라우저에 표시되지 않습니다. 아직 마운트되지 않았기 때문에 DOM 사용 가능한 검사가 없습니다.
Coreus


1

구성 API

템플릿 참조 섹션은 이것이 어떻게 통합되었는지 알려줍니다.

  • 템플릿 내에서 ref="myEl"; :ref=와 함께v-for
  • 스크립트 내 const myEl = ref(null)에서setup

참조는 마운트부터 DOM 요소를 전달합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.