导入的组件和控制台消息

Posted

技术标签:

【中文标题】导入的组件和控制台消息【英文标题】:Imported component and console message 【发布时间】:2021-07-24 18:11:51 【问题描述】:

我对导入组件中的道具有疑问。 我使用对话框模板导入了组件,我想从道具中显示文本并且它可以工作,但是我在控制台中有错误。

在控制台我看到这个错误:

[Vue 警告]:渲染错误:“TypeError:无法读取属性 '测试'为空"

但是打开对话框后的值是正确的。

如何解决这个问题,使控制台中的错误不显示?

我的代码:

<template>
  <v-container fluid>
    <v-row>
      <v-col cols="12">
        <v-card class="">
          <TipItem v-for="tip in tips" :key="tip.id" v-on:open-dialog="openTipDetailsDialog(tip)"></TipItem>
        </v-card>
      </v-col>
    </v-row>
    <TipDetailsDialog :dialog="tipDetailsDialog" :tip="tipDetails" v-on:close-dialog="tipDetailsDialog = false"></TipDetailsDialog>
  </v-container>
</template>

<script>
  import TipItem from "../components/TipItem";
  import TipDetailsDialog from "../components/TipDetailsDialog";

  export default 
    name: "Tips",
    components: 
      TipItem,
      TipDetailsDialog
    ,
    data: () => (
      tips: [],
      tipDetailsDialog: false,
      tipDetails: null
    ),
    methods: 
      openTipDetailsDialog(tip) 
        this.tipDetailsDialog = true;
        this.tipDetails = tip;
      
    
  ;
</script>

提示详情对话框

<template>
  <v-dialog
      :value="dialog"
      fullscreen
      hide-overlay
      transition="dialog-bottom-transition"
      @input="$emit('close-dialog')"
  >
    <v-card class="rounded-0">
      <v-toolbar color="primary">
        <v-toolbar-title>Szczegóły</v-toolbar-title>
        <v-spacer></v-spacer>
        <v-btn icon dark @click="$emit('close-dialog')">
          <v-icon>mdi-close</v-icon>
        </v-btn>
      </v-toolbar>
      <v-container>
        <v-row>
          <v-col cols="6">
            <v-card>
               tip.test 
            </v-card>
          </v-col>
          <v-col cols="6">
            <v-card>
               tip.test2 
            </v-card>
          </v-col>
        </v-row>
      </v-container>
    </v-card>
  </v-dialog>

</template>

<script>
  export default 
    name: "TipDetailsDialog",
    props: ["dialog", "tip"]
  ;
</script>

【问题讨论】:

【参考方案1】:

tipDetails被初始化为null,然后绑定到 &lt;TipDetailsDialog&gt;.tip,这会导致它尝试渲染 tip.test (其中tipnull)。

因为TipDetailsDialog 并没有真正呈现任何有意义的东西 没有填充的tip,该组件可能应该是 仅当tipDetails 为真时才会有条件地呈现:

html &lt;TipDetailsDialog v-if="tipDetails" :tip="tipDetails" /&gt;

或者你可以给prop设置一个默认值:

    props: 
        tip: 
            type: String,
            required: false,
            default: () => ""
        ,
    ,

【讨论】:

【参考方案2】:

tipDetails 被初始化为null,然后绑定到&lt;TipDetailsDialog&gt;.tip,这导致它尝试渲染tip.test(其中tipnull)。

由于TipDetailsDialog 在没有填充tip 的情况下不会真正呈现任何有意义的东西,因此该组件可能应该仅在tipDetails 为真时有条件地呈现:

<TipDetailsDialog v-if="tipDetails" :tip="tipDetails" />

【讨论】:

以上是关于导入的组件和控制台消息的主要内容,如果未能解决你的问题,请参考以下文章

VueJS 自定义组件导入有时有效

WebApi-控制器路由

RN - 封装Android原生WebView组件,实现JS获取原生消息回调及JS控制native组件

快来一起玩转LiteOS组件:RHas

Spring 和 SockJs 的控制器组件问题

如何安装消息队列