为什么 Quasar、Vue 3 应用中 Child 组件中的 props 是空的?

Why the props in a Child component are empty in Quasar, Vue 3 app?

提问人:Ron 提问时间:11/10/2023 最后编辑:Ron 更新时间:11/15/2023 访问量:27

问:

我正在将 props 作为表中的一行传递给 Quasar vue3 应用程序中的 Child 组件表,但内容没有呈现,我想知道为什么?控制台很清楚。在父组件中,我定义了一个带有键和值的对象,并尝试将其作为道具传递给子组件,然后渲染它。我正在用按钮切换父组件中的模态窗口。

    // Child component

    const props = defineProps({
        airCraft: {
          required: true
        }
      })
      const rows = [props.airCraft]
      
      <template>
      <q-dialog >
          <q-card>
            <q-card-section>
              <q-table
                title="name"
                :rows="rows"
                :columns="columns"
                row-key="name"
                :hide-bottom="rows.length > 0"
                flat bordered
                >
                <template v-slot:body="props">
                  <q-tr :props="props">
                    <q-td key="id" :props="props">
                      {{ props.row.id }}
                    </q-td>
                <template>
              <q-table>
          <q-card-section>
        <q-card>
      <q-dialog >        
      <template>
      
      // Parent component
     <script>
     let airCraft = {
      id: '1',
      name: 'name'
     }
     <script setup>
import {ref} from 'vue' 
let fixed = ref(true)
     <template>
        <ModalAircraft v-model="fixed" :airCraft="airCraft" @click='fixed = true'/>
      <template>

javascript vue.js vuejs3 类星体 vue-props

评论


答:

1赞 duckstery 11/10/2023 #1

我认为这是因为你没有激活你的,你应该这样改变你的q-dialogModalAircraft

<template>
  <div>
    <q-btn label="Click" @click="modal = true" />
    <q-dialog v-model="modal">
      <q-card>
        <q-card-section>
          <q-table
            title="name"
            :rows="rows"
            :columns="columns"
            row-key="name"
            :hide-bottom="rows.length > 0"
            flat
            bordered
          >
            <template v-slot:body="props">
              <q-tr :props="props">
                <q-td key="id" :props="props">
                  {{ props.row.id }}
                </q-td>
              </q-tr>
            </template>
          </q-table>
        </q-card-section>
      </q-card>
    </q-dialog>
  </div>
</template>

<script setup>
import { ref } from 'vue';

const props = defineProps({
  airCraft: {
    required: true,
  },
});

const rows = [props.airCraft];

const modal = ref(false);
</script>

我添加了一个在单击时切换到 true。然后,绑定到 .在组件渲染后,您会看到一个按钮。单击该按钮后,会弹出一个对话框,您将找到您的表格q-btnmodalmodalq-dialog

代码在这里:https://stackblitz.com/edit/stackblitz-starters-icrnbz

评论

0赞 Ron 11/10/2023
谢谢,但它没有用。对不起。我没有在一开始就向你展示初始代码。因为我在父组件中有一个切换显示弹出窗口,上面有一个 ref 状态。无论如何,它都无济于事。我现在已经编辑了初始代码问题。
0赞 duckstery 11/10/2023
我可以看到你添加了一些东西。这里有 2 个问题。首先,整个是一个对话框,所以向它添加一个点击事件对你没有帮助,因为你无法点击它,因为它不在屏幕上。其次,您没有为 声明任何 v-model 处理程序,因此 on 毫无意义。尝试在 里面添加一个按钮,然后戴上它。移动你的内部.在那之后,一切都会好起来的fixedModalAircraftModalAircraftv-modelModalAircraftModalAircraft@clickfixedModalAircraft