Vue中computed计算属性和data数据获取方式

目录
  • computed计算属性和data数据获取
    • 解决方法一
    • 解决方法二
  • computed计算属性取对象的值,第一次报错undefined
    • 报错和打印值
    • 解决方案

computed计算属性和data数据获取

获取到数据(对象、数组),截取一部分显示到页面中,用computed计算属性来实现截取数据然后直接输出到页面。

<div class="detailBox">
  <h1 class="detailHead">{{ActiveData.title}}</h1>
  <div class="detailCon">
    <p><b>活动时间:</b>{{ActStart}} 至 {{ActEnd}}</p>
    <p><b>报名时间:</b>{{SigStart}} 至 {{SigEnd}}</p>
  </div>
</div>
data() {
   return {
     ActiveData:"",//活动详情所有数据
  }
},
methods:{
//获取对应的数据
    this.ActiveData = response.data.data;
}
computed:{
    ActStart(){
      console.log(this.ActiveData.activity_starttime);
      return this.ActiveData.activity_starttime.substring(5,11);
    },
    ActEnd(){
      return this.ActiveData.activity_endtime.substring(5,11);
    },
    SigStart(){
     return this.ActiveData.signup_starttime.substring(5,11);
    },
    SigEnd(){
      return this.ActiveData.signup_endtime.substring(5,11);
    },
  }

页面如愿显示出想要的效果了,但是也报错了!那是因为data里的数据是在mouted中执行函数才获取到数据,是在computed之后,所以在第一次computed计算时,data中的ActiveData数据还是空的,所以computed找不到ActiveData里的数据。

就会报undefinded接着是Error in render: "TypeError:……"获取到值后重新计算又出现了获取到的值。

解决方法一

给要截取的数据赋一个默认值,computed计算属性会先去计算默认值,在获取到新值后重新计算,就不会报undefinded的错误了。

data() {
    return {
      ActiveData:"",//活动详情所有数据
      ActStarts:"",//活动开始时间
      ActEnds:"",//活动结束时间
      SigStarts:"",//报名开始时间
      SigEnds:"",//报名结束时间
    }
  }, 

methods:{
//获取对应的数据
    this.ActiveData = response.data.data;
    this.ActStarts = response.data.data.activity_starttime;
    this.ActEnds = response.data.data.activity_endtime;
    this.SigStarts = response.data.data.signup_starttime
    this.SigEnds = response.data.data.signup_endtime
}
computed:{
    ActStart(){
      console.log(this.ActStarts);
      return this.ActStarts.substring(5,11);
    },
    ActEnd(){
      return this.ActEnds.substring(5,11);
    },
    SigStart(){
      return this.SigStarts.substring(5,11);
    },
    SigEnd(){
      return this.SigEnds.substring(5,11);
    },
  }

解决方法二

在computed中增加if判断,在data中的ActiveData里有数据时才在computed中返回对应的数据

data() {
   return {
     ActiveData:"",//活动详情所有数据
  }
},
methods:{
//获取对应的数据
    this.ActiveData = response.data.data;
}
computed:{
    ActStart(){
      console.log(this.ActiveData.activity_starttime);
      if(this.ActiveData.activity_starttime !== undefined){
        return this.ActiveData.activity_starttime.substring(5,11);
      }
   },
   ActEnd(){
      if(this.ActiveData.activity_endtime !== undefined){
        return this.ActiveData.activity_endtime.substring(5,11);
      }
   },
   SigStart(){
      if(this.ActiveData.signup_starttime !== undefined){
        return this.ActiveData.signup_starttime.substring(5,11);
      }
   },
   SigEnd(){
       if(this.ActiveData.signup_endtime !== undefined){
        return this.ActiveData.signup_endtime.substring(5,11);
      }
   },
}

computed计算属性取对象的值,第一次报错undefined

代码如下:

  data() {
    return {
      limit:3,
      checkedIndex:0,
      addressList:[],
      isMdShow:false,
      addressId:""
    };
  },
  components: {
    NavHeader,
    NavFooter,
    NavBread,
    Modal
  },
  mounted(){
    this.init()
  },
    computed:{
    addressListFilter(){
      return this.addressList.slice(0,this.limit)
    },
    selectedAddressId(){

      // if(this.addressList.length>0){
       let data = this.addressList[this.checkedIndex].addressId
       console.log(this.addressList,"====")
       return data
      //  }
    }
  },

图片:

注意,初始化的时候,addressList还是一个空数组,那addressList[index]对象就不存在,肯定就没有addressId这个属性,所以会报undefined

报错和打印值

解决方案

那我们现在可以知道,报错的原因是第一次计算的时候,addressList还没有赋值,所以,我们可以进行一个判断,当addressList有值了我们在进行计算

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • Vue computed计算属性的使用方法

    computed computed:相当于method,返回function内return的值赋值在html的DOM上.但是多个{{}}使用了computed,computed内的function也只执行一次.仅当function内涉及到Vue实例绑定的data的值的改变,function才会从新执行,并修改DOM上的内容. computed和method的对比 <div id="example"> {{ message.split('').reverse().join('

  • Vue中计算属性computed的示例解读

    计算属性 表达式是非常便利的,但是它们实际上只用于简单的运算.在模板中放入太多的逻辑会让模板过重且难以维护,所以引入了计算属性computed,将复杂的逻辑放入计算中进行处理,同时computed有缓存功能,防止复杂计算逻辑多次调用引起的性能问题. computed原理 computed的属性reversedMessage在data中会有一个对我们不可见的cacheReversedMessage属性对应 cacheReversedMessage的值是根据其绑定的data中的message来决定的

  • vue 解决computed修改data数据的问题

    最近在做项目的时候遇见一个问题,computed修改data数据的时候会报错.报错的大概意思是,不可以修改data数据的属性值.查了一些答案,最终解决办法是需要用到set和get.看代码: data () { return { fold: false } } 我想修改fold的值,如果不用get和set就会报错!!! computed:{ listShow: { get: function () { if (!this.totalCount) { return false } return th

  • Vue中computed计算属性和data数据获取方式

    目录 computed计算属性和data数据获取 解决方法一 解决方法二 computed计算属性取对象的值,第一次报错undefined 报错和打印值 解决方案 computed计算属性和data数据获取 获取到数据(对象.数组),截取一部分显示到页面中,用computed计算属性来实现截取数据然后直接输出到页面. <div class="detailBox"> <h1 class="detailHead">{{ActiveData.tit

  • Vue中computed(计算属性)和watch(监听属性)的用法及区别说明

    目录 计算属性computed 侦听属性watch 计算属性computed 支持缓存,只有依赖数据发生改变,才会重新进行计算 不支持异步,当computed内有异步操作时无效,无法监听数据的变化 computed 属性值会默认走缓存,计算属性是基于它们的响应式依赖进行缓存的,也就是基于data中声明过或者父组件传递的props中的数据通过计算得到的值 如果一个属性是由其他属性计算而来的,这个属性依赖其他属性,是一个多对一或者一对一,一般用computed 如果computed属性属性值是函数,

  • vue中的计算属性和侦听属性

    计算属性 计算属性用于处理复杂的业务逻辑 计算属性具有依赖性,计算属性依赖 data中的初始值,只有当初始值改变的时候,计算属性才会再次计算 计算属性一般书写为一个函数,返回了一个值,这个值具有依赖性,只有依赖的那个值发生改变,他才会重新计算 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewpo

  • Vue中使用计算属性的知识点总结

    计算属性 有些时候,我们在模板中放入了过多的逻辑,从而导致模板过重,且难以维护.例如: <div id="app"> {{ message.split('').reverse().join('') }} </div> 碰到这样的情况,我们必须看一段时间才能意识到,这里是想要显示变量message的翻转字符串,而且,一旦我们想要在模板中多次使用翻转字符串时,会更加麻烦. 所以,当我们处理复杂逻辑时,都应该使用计算属性. 基础用法 计算属性是Vue配置对象中的属性,

  • 简单聊聊Vue中的计算属性和属性侦听

    目录 1. 计算属性 语法:  1.简写方式: 语法:  2.完整写法: 2. 监视(侦听)属性 1. 监视属性watch: 2. 深度监视 3. 区别和原则 总结 1. 计算属性 定义 计算属性:要用的属性不存在,要通过已有属性计算得来,计算属性要有一个全新的配置项computed 对Vue来说,data里面的数据就是属性,只要Vue中的数据改变,就会重新解析模板,遇到插值语法里的方法会重新调用 原理 底层借助了Objcet.defineproperty方法提供的getter和setter.

  • Vue的computed计算属性你了解吗

    目录 computed计算属性 1.什么是计算属性 2.为什么要用计算属性 3.compute.methods和watch三者的区别 4.案例:遍历数组对象的时候进行监视 总结 computed计算属性 1.什么是计算属性 计算属性 本质是方法,只是在使用这些 计算属性 的时候,把他们的名称直接当作 属性 来使用,并不会把 计算属性 当作方法去调用,不需要加小括号 ()调用. 2.为什么要用计算属性 当你需要一个属性是需要经过一些计算的,比如你要一个discounted折扣后的钱属性,现在有pr

  • vue中的计算属性的使用和vue实例的方法示例

    本文介绍了vue计算属性的使用和vue实例的方法示例,分享给大家,具体如下: 计算属性 在模板中表达式非常便利,但是它们实际上只用于简单的操作.模板是为了描述视图的结构.在模板中放入太多的逻辑会让模板过重且难以维护.这就是为什么 Vue.js 将绑定表达式限制为一个表达式.如果需要多于一个表达式的逻辑,应当使用计算属性. vue 计算属性 当我们想要根据一端业务代码的执行结果来返回属性的值,就可以使用计算属性computed了, 计算属性是一个有结果的函数,有get方法和set方法,get方法,

  • Vue中的计算属性与监听属性

    目录 一.为什么要使用计算属性 什么是计算属性 二.计算属性和方法的区别 1.区别 2.计算属性使用场景 三.修改计算属性的值 总结 四.监听属性 1.监听普通属性 2.监听属性和计算属性的区别 3.监听复杂对象 一.为什么要使用计算属性 什么是计算属性 计算属性:可以理解为能够在里面写一些计算逻辑的属性.具有如下的作用: 减少模板中的计算逻辑. 数据缓存.当我们的数据没有变化的时候,不会再次执行计算的过程. 依赖固定的数据类型(响应式数据),不能是普通的传入的一个全局数据. 在数据量比较大的时

  • vue中的计算属性传参

    目录 vue计算属性传参 我们来看看下面的示例 vue计算属性传参,根据值不同,渲染相应的内容 业务描述 vue计算属性传参 最近很多小伙伴问到,计算属性怎么做到像普通函数一样传参呢? 针对这个问题 我们来看看下面的示例 <template>     <p>{{ getCallerName }}</p>  </template> <script> export default {     props: {         callRecord:

  • vue中的计算属性实例详解

    什么是计算属性 模板内的表达式非常便利,但是设计它们的初衷是用于简单运算的.在模板中放入太多的逻辑会让模板过重且难以维护.例如: <div id="example"> {{ message.split('').reverse().join('') }} </div> 这里的表达式包含3个操作,并不是很清晰,所以遇到复杂逻辑时应该使用Vue特带的计算属性computed来进行处理. 计算属性(computed)用于处理复杂逻辑 computed:{ } compu

随机推荐