问答

vue 组件传值对象属性不存在问题有什么好的解决方案?

作者:admin 2021-09-29 我要评论

假设如下示例: template radar v-bind:items="result.radar"/ /template script import Radar from "./Radar"; export default { props: { result: Object, }, ...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

假设如下示例:

<template>  
    <radar v-bind:items="result.radar"/>  
</template>  
  
<script>  
    import Radar from "./Radar";  
    export default {  
        props: {  
            result: Object,  
        },  
        components: {  
            Radar  
        },  
    }  
</script>

假设我 data 传递 null or {} or undefined 时, data.radar 会报错,请问这种情况有什么好的解决方案吗?难道必须通过 data(){} 将 result 数据平铺赋值吗?

错误提示信息:

Error in render: "TypeError: Cannot read property 'radar' of undefined"
###

做个判断如何?

<radar :items="(result && result.rada)??result"/>  
###

最优方案是设默认对象,Object可通过工厂函数返回默认值

props: {
  result: {
    type: Object,
    default: () => ({radar: ''}),
  },
},
###
  1. 模版里使用 v-if 判断,空值就显示成别的样式。这样做一般用户体验也比较好。
  2. 一定要有初始值的话,可以用 computed,然后模版里只用计算后的。比如:

    export default {
      props: {
        radar: {
          type: Object,
          default: null,
        },
      },
      computed: {
        localRadar() {
          return this.radar || this.createDefaultRadar();
        },
      },
    }

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  • vue 组件传值对象属性不存在问题有什么

    vue 组件传值对象属性不存在问题有什么

  • 如何计算移动端首屏加载时间和页面开始

    如何计算移动端首屏加载时间和页面开始

  • 谷歌浏览器快捷键失效

    谷歌浏览器快捷键失效

  • git中,如何实现:分支1只拉取分支2的

    git中,如何实现:分支1只拉取分支2的

腾讯云代理商
海外云服务器