부모 구성 요소 이벤트의 vue 자식 구성 요소 대상 가져 오기

데빈 크로스 맨

Vue.js를 실험 중이며 일부 하위 구성 요소가있는 상위 구성 요소가 있습니다. 내가 할 수있는 것은 "클릭 및 드래그"되는 구성 요소를 추적하는 것입니다.

이것은 내 문제를 이해하는 예입니다.

지금까지 내가 가진 것은 사용자가 mousedown부모 구성 요소 에서 이벤트를 시작 mouseover하여 자식 구성 요소 리스너 를 조건부로 활성화하여 어떤 자식 구성 요소가 이동되는지 추적하는 것입니다. 사용자가 마우스 버튼을 놓으면 mouseover리스너가 제거됩니다.

메서드를 사용하여 이벤트 리스너를 조건부로 추가 할 수있었습니다 . 문제는 초기 mousedown이벤트가 실행될 하위 구성 요소가 mouseover이벤트를 트리거 하지 않으므로 추적되지 않으며 mouseover하위 구성 요소에 대한 후속은 다음 과 같이 추적됩니다. 예상됩니다. 또한 "클릭 앤 드래그"를 시작할 때 마우스가 놓인 하위 구성 요소를 추적 할 수 있기를 원합니다.

이 문제를 해결하려면, 나는 점점 오전 event.target.__vue__mousedown하위 구성 요소에 액세스 명시 적으로 추적 방법을 호출하는 이벤트를. (예제에서 App.vue의 25 행)

내 질문은 : 사용하는 것 외에 mousedown부모에서 발생 하는 이니셜 아래에있는 자식 구성 요소에서 추적 메서드를 트리거하는 더 Vue.js 적절한 방법이 event.target.__vue__있습니까? 또는 일반적으로 "클릭 및 드래그"되는 하위 구성 요소를 추적하는 더 좋은 방법이 있습니까?

스핑크스

부모 구성 요소와 자식 구성 요소가 강한 관계가있는 경우 (예 : 자식 구성 요소가 부모 구성 요소 내에 배치되어야 함) Vue provide & inject 를 시도하고 싶을 것입니다 .

  1. 부모 구성 요소는 자식이 트랙을 등록한 다음을 사용 provide하여 (데모 아래에서 this키워드로 인스턴스를 전달 ) 자식 에게 전달할 수있는 한 가지 방법을 제공합니다 .

  2. 각 하위 구성 요소는 해당 메서드를 호출하여 상위에 트랙을 업로드하기 만하면됩니다.

그러나 제공 / 주입의 경우 다음 사항에주의하십시오.

참고 : 제공 및 삽입 바인딩은 반응이 없습니다. 이것은 의도적 인 것입니다. 그러나 관찰 된 객체를 전달하면 해당 객체의 속성은 계속 반응합니다.

다음은 간단한 데모입니다 .

Vue.config.productionTip = false

Vue.component('so-parent', {
  provide() {
    return {
      _tracker: this
    }
  },
  template: `
    <div @mousedown="toggleTrack(true)" @mouseup="toggleTrack(false)"><h3>children count: {{children.length}} - tracking: {{trackState}}</h3><h3>{{tracks}}</h3><slot></slot></div>
  `,
  data() {
    return {
      children: [],
      tracks: [],
      trackState: false
    }
  },
  methods: {
    _registerChild(child) {
      this.children.push(child)
    },
    _registerTracks(track) {
      if (this.trackState) this.tracks.push(track)
    },
    toggleTrack: function(state) {
      this.trackState = state
      if(!this.trackState) {
        this.tracks = []
      }
    }
  }
})

Vue.component('so-child', {
  inject: {
    _tracker: {
      default () {
        console.error('so-child must be child of so-parent')
      }
    }
  },
  data() {
    return {
      childState: false,
      childSeq: 0
    }
  },
  props: ['cid'],
  render(h) {
    return h('div', {
      class: 'child',
      on: {
        mouseover: () => this._tracker._registerTracks(this.cid)
      }
    }, [this.childSeq + ' Child Component ' + this.cid, this.$slots.default])
  },
  mounted() {
    this.childSeq = this._tracker.children.length
    this._tracker._registerChild(this)
  }
})

new Vue({
  el: '#app'
})
div.child {
  border: 1px solid;
  display: inline-block;
  padding: .5em 1em;
  margin: 0 0.5em 1em;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
  &:hover {
    background: #b2bde3;
    cursor: pointer;
    color: white;
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>

<div id="app">
  <so-parent>
    <so-child cid="A"></so-child>
    <so-child cid="B"></so-child>
    <so-child cid="C"></so-child>
    <so-child cid="D"></so-child>
  </so-parent>
</div>

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

React : 부모의 자식 구성 요소 상태 가져 오기

부모 구성 요소에서 자식 구성 요소의 요소에 대한 참조 가져 오기

자식 구성 요소에서 부모 구성 요소의 elementRef 가져 오기

부모 구성 요소에서 자식 구성 요소 소품 가져 오기

Vue 구성 요소의 중첩 된 자식 상태 가져 오기

reactjs의 자식 구성 요소에서 부모 구성 요소로 데이터 가져 오기

부모가 전달한 소품을 통해 자식 구성 요소의 현재 상태 가져 오기-Reactjs

부모 구성 요소의 자식 구성 요소에 대한 참조 얻기

React-부모 구성 요소의 자식 구성 요소에있는 참조 가져 오기

Blazor의 부모 구성 요소에서 자식 구성 요소 바인딩 값 가져 오기

부모 구성 요소를 클릭하면 자식 구성 요소에서 데이터 가져 오기

Angular는 부모 구성 요소에서 모든 자식 구성 요소의 상태를 가져옵니다.

Vue 구성 요소의 조건부 가져 오기

vue.js json 부모 구성 요소에서 자식 구성 요소 상속

자식 구성 요소에서 부모 구성 요소로 보내는 이벤트의 이상한 동작

자식 상태를 부모 구성 요소로 가져오는 방법

대화 상자 VUE에서 부모 구성 요소에서 자식 구성 요소로 소품 전달

Vue의 자식 구성 요소에서 입력 값 가져오기

자식 구성 요소를 클릭하면 부모 구성 요소 속성 가져 오기

부모 구성 요소의 자식 구성 요소에서 이벤트 방출에 대한 값 포착

자식 구성 요소의 ondragend 이벤트가 부모 구성 요소 메서드를 호출합니다.

Vue.JS의 부모 구성 요소 내에 자식 구성 요소 만들기

부모 구성 요소 내부의 개체 형태로 모든 자식 구성 요소에서 통합 데이터 가져오기: React JS

Vue 외부에서 Vue 구성 요소의 데이터 가져 오기

ReactJS 부모 구성 요소 상태가 자식 구성 요소 상태에 의해 재정의됩니다.

자식 구성 요소에서 변경된 부모 구성 요소의 상태를 기반으로 부모 구성 요소에서 코드 실행

Vue 구성 요소 내부에 자식 Vue 구성 요소 추가

Angular의 부모 구성 요소에 자식 구성 요소 만들기

Blazor 부모 구성 요소가 자식의 onclick 이벤트 후 예기치 않게 다시 초기화 됨

TOP 리스트

뜨겁다태그

보관