ホームページ > ウェブフロントエンド > uni-app > uniapp がサブコンポーネント メソッドの呼び出しに失敗した場合はどうすればよいですか?

uniapp がサブコンポーネント メソッドの呼び出しに失敗した場合はどうすればよいですか?

PHPz
リリース: 2023-04-27 09:31:07
オリジナル
764 人が閲覧しました

最近、uniapp を使用して小さなプログラムを開発していたときに、サブコンポーネント メソッドの呼び出しに失敗するという問題が発生しました。調査とデバッグを行った結果、解決策を見つけたので、それを共有します。

まず、この問題が発生するシナリオを見てみましょう。カスタム コンポーネントがページに導入され、コンポーネント内に外部から呼び出す必要があるメソッドがあります。これは、コンポーネント オブジェクトのメソッドでメソッドを定義し、コンポーネント内でそのメソッドを呼び出すことで実現できます。ただし、実際に呼び出すと、以下に示すように、このメソッドは常に null 値を返すことがわかりました。

// 引入组件
<template>
  <custom-component ref="customComponent"></custom-component>
</template>

<script>
  import customComponent from '@/components/custom-component.vue'
  export default {
    components: {
      customComponent
    },
    mounted() {
      // 调用子组件方法
      const data = this.$refs.customComponent.customMethod()
      console.log(data) // 输出:undefined
    }
  }
</script>

// custom-component.vue
<template>
  <div>这是一个自定义组件</div>
</template>

<script>
  export default {
    methods: {
      customMethod() {
        return '这是从子组件返回的数据'
      }
    }
  }
</script>
ログイン後にコピー

ここでは、親コンポーネントで子コンポーネントのcustomMethod メソッドを呼び出し、戻り値を出力しようとしています。方法。ただし、コンソールでは戻り値が未定義であることがわかります。

調査の結果、uniappのコンポーネントの通信方法がVueのネイティブコンポーネントの通信方法と異なるためであることが判明しました。 uniapp では、uni.$emit を使用してイベントを送信し、コンポーネントでイベントをリッスンする必要があります。正しい例は次のとおりです。

// 引入组件
<template>
  <custom-component @customEvent="onCustomEvent"></custom-component>
</template>

<script>
  import customComponent from '@/components/custom-component.vue'
  export default {
    components: {
      customComponent
    },
    methods: {
      onCustomEvent(data) {
        console.log(data) // 输出:这是从子组件返回的数据
      }
    }
  }
</script>

// custom-component.vue
<template>
  <div>这是一个自定义组件</div>
</template>

<script>
  export default {
    methods: {
      customMethod() {
        // 向父组件发送事件
        this.$emit('customEvent', '这是从子组件返回的数据')
      }
    }
  }
</script>
ログイン後にコピー

この例では、@customEvent を使用してサブコンポーネントのイベントをリッスンし、onCustomEvent メソッドでサブコンポーネントから渡されたデータを処理します。イベントを送信するメソッドは、親コンポーネントで子コンポーネントのメソッドを呼び出すのではなく、子コンポーネントで行う必要があることに注意してください。

これは、uniapp では、親コンポーネントが子コンポーネントのメソッドを直接呼び出すことができないためです。代わりに、データ転送とコンポーネント通信にイベントを使用する必要があります。

要約すると、uniapp とネイティブ Vue のコンポーネント通信方法は少し異なります。 uniapp では、イベントを通じてコン​​ポーネント間で通信する必要があります。特にサブコンポーネントのメソッドを呼び出す場合、これを実現するには $emit を使用してイベントを送信し、サブコンポーネントでイベントをリッスンする必要があります。

この記事が皆様のお役に立てば幸いです。読んでいただきありがとうございます。

以上がuniapp がサブコンポーネント メソッドの呼び出しに失敗した場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート