Ionic Vue组件错误:应为函数,得到的是字符串

3lxsmp7m  于 2022-12-08  发布在  Ionic
关注(0)|答案(2)|浏览(141)

我正在使用ionic with vue开发一个应用程序。我制作了一个自定义按钮,并希望包含在另一个组件中。我试图为按钮分配一个功能,但似乎不起作用。我得到的错误是:

[Vue警告]:无效的属性:属性“onClick”的类型检查失败。预期为函数,但得到值为“addTodo”的字符串。

第一次使用vue。提前感谢。

按钮组件

<template>
<ion-footer>
    <ion-button fill="outline" expand="block" color="primary" @click="onClick">
        <ion-ripple-effect></ion-ripple-effect>
        {{text}}
    </ion-button>
</ion-footer>
</template>
<script>
export default {
props: {
    onClick:Function,
    text:String,
}
}
</script>

其他组件

<template>
  <ion-row>
      <ion-col>
        <main-btn text="Add Activity" onClick="addTodo"></main-btn>
      </ion-col>
    </ion-row>
  </ion-grid> 
</template>

<script>
import axios from 'axios';

export default {
    data() {
       return {
         todos: []
          }
    },
    methods: {
      addTodo() {
    this.$router.push({path: '/todos/add'})
   }
  },
    created() {
       axios.get('http://localhost:3001/todos')
     .then(res => this.todos = res.data)
   }
}
 </script>
enxuqcxy

enxuqcxy1#

只要把它修改一下,你不需要把函数作为一个 prop 传递。
在按钮组件中:

@click="$emit('click')"

在“另一个组件”中

<main-btn text="Add Activity" @click="addTodo"></main-btn>

只需将click事件从子组件冒泡即可。

xfb7svmp

xfb7svmp2#

您的做法与Vue的工作方式背道而驰。您总是希望向下传递Props,其中包含子组件所需的数据,并向上向父组件发出事件以处理必要的函数调用。
您的子组件“main-btn”应更像下面这样

<ion-button fill="outline" expand="block" color="primary" @click="$emit("onClick")">
    <ion-ripple-effect></ion-ripple-effect>
    {{text}}
</ion-button>

这将允许任何父组件查找由子组件发出的onClick事件,并做出相应的React。在您的情况下,父组件只需要稍作更改。

<ion-col>
    <main-btn text="Add Activity" @onClick="addTodo"></main-btn>
  </ion-col>

父组件正在查找onClick事件,并通过调用其addTodo函数做出相应的React
https://v2.vuejs.org/v2/guide/components.html#Listening-to-Child-Components-Events

相关问题