> 웹 프론트엔드 > uni-app > uniapp 하위 구성 요소가 상위 구성 요소 데이터를 얻을 수 없으면 어떻게 해야 합니까?

uniapp 하위 구성 요소가 상위 구성 요소 데이터를 얻을 수 없으면 어떻게 해야 합니까?

PHPz
풀어 주다: 2023-04-18 14:58:10
원래의
2456명이 탐색했습니다.

uniapp을 사용하여 작은 프로그램이나 H5 애플리케이션을 개발하는 과정에서 하위 컴포넌트가 상위 컴포넌트의 데이터를 가져와야 하는 상황에 자주 직면하지만 때로는 하위 컴포넌트의 js 코드가 전달된 데이터를 가져올 수 없는 경우가 있습니다. 상위 구성 요소. 이는 Vue에서 하위 구성요소가 상위 구성요소의 데이터에 직접 액세스할 수 없기 때문입니다. 그러면 이 문제를 어떻게 해결합니까? 아래에서는 개발 과정에서 이 문제를 원활하게 해결하는 데 도움이 되는 몇 가지 솔루션을 제공합니다.

1. props를 사용하여 데이터 전달

Vue에서는 props(속성)를 통해 자식 컴포넌트에 데이터가 전달되므로 자식 컴포넌트는 부모 컴포넌트에서 전달한 데이터를 사용할 수 있습니다. 상위 구성 요소에 값을 정의한 다음 이를 하위 구성 요소에 바인딩하면 하위 구성 요소가 값을 읽을 수 있습니다. 다음은 샘플 코드입니다.

상위 컴포넌트:

<template>
  <div>
    <child-component :parentData="parentData"></child-component>
  </div>
</template>
<script>
export default {
  data() {
    return {
      parentData: '来自父组件的数据'
    }
  }
}
</script>
로그인 후 복사

하위 컴포넌트:

<template>
  <div>{{parentData}}</div>
</template>
<script>
export default {
  props: {
    parentData: String
  }
}
</script>
로그인 후 복사

props를 통한 데이터 전달은 Vue에서 가장 일반적으로 사용되는 방법입니다. 그러나 때로는 부모 구성 요소가 로드되기 전에 데이터를 가져와야 하는 자식 구성 요소와 같은 몇 가지 특수한 상황에 직면하기도 합니다. 이때는 다른 방법을 사용해야 합니다.

2. $parent를 사용하여 상위 구성 요소의 인스턴스를 가져옵니다.

Vue는 상위 구성 요소의 인스턴스를 가져오는 데 사용할 수 있는 $parent 속성을 제공합니다. 이 인스턴스를 통해 상위 구성 요소의 데이터를 직접 호출할 수 있습니다. 다음은 샘플 코드입니다.

Parent 컴포넌트:

<template>
  <div>
    <child-component></child-component>
  </div>
</template>
<script>
export default {
  data() {
    return {
      parentData: '来自父组件的数据'
    }
  },
  mounted() {
    this.$refs.child.printParentData()
  }
}
</script>
로그인 후 복사

Child 컴포넌트:

<template>
  <div>子组件</div>
</template>
<script>
export default {
  methods: {
    printParentData() {
      console.log(this.$parent.parentData)
    }
  }
}
</script>
로그인 후 복사

위 코드에서는 $parent를 통해 부모 컴포넌트 인스턴스를 얻은 후 인스턴스에서 parentData 데이터를 호출하여 최종적으로 성공적으로 가져왔습니다. 구성 요소의 상위 데이터입니다.

이 방법을 부적절하게 사용하면 일부 커플링 문제가 발생할 수 있으므로 사용 시 구체적인 시나리오를 고려하고 장단점을 저울질해야 합니다.

3. $emit를 사용하여 상위 구성 요소 이벤트 실행

props 및 $parent를 사용하여 상위 구성 요소 데이터를 얻는 것 외에도 $emit를 통해 상위 구성 요소 이벤트를 실행하여 데이터를 전달할 수도 있습니다. 구체적인 구현 과정은 다음과 같습니다.

상위 컴포넌트:

<template>
  <div>
    <child-component @getChildData="getChildData"></child-component>
  </div>
</template>
<script>
export default {
  data() {
    return {
      parentData: ''
    }
  },
  methods: {
    getChildData(data) {
      this.parentData = data
    }
  }
}
</script>
로그인 후 복사

하위 컴포넌트:

<template>
  <div>
    <button @click="sendData">传递数据</button>
  </div>
</template>
<script>
export default {
  methods: {
    sendData() {
      this.$emit('getChildData', '来自子组件的数据')
    }
  }
}
</script>
로그인 후 복사

위 코드에서는 $emit를 통해 getChildData라는 이벤트를 트리거하고 하위 컴포넌트에 전달해야 하는 데이터를 전달했습니다. 상위 구성 요소에. 상위 구성 요소에서는 @getChildData 이벤트를 바인딩하여 하위 구성 요소가 전달한 데이터를 수락하고 이를 parentData에 저장합니다.

데이터를 수신하는 이벤트 이름은 개발자가 정의할 수 있습니다. 하위 구성 요소와 상위 구성 요소의 이벤트 이름이 일치하는지 확인하세요.

위 내용은 uniapp 하위 구성 요소 js가 상위 구성 요소 데이터를 얻을 수 없는 문제에 대한 해결 방법입니다. 다양한 시나리오에서 이 문제를 해결하기 위해 다양한 방법을 선택할 수 있습니다. 이 기사가 모든 사람에게 도움이 되기를 바랍니다.

위 내용은 uniapp 하위 구성 요소가 상위 구성 요소 데이터를 얻을 수 없으면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿