Vue中的计算属性使用,动态赋值property

在使用Vue时候,可能会发现一个问题:我们不想在data中给某个property赋上固定的默认值,而是想赋值一些经过计算的property值,甚至使用到了其他property,第一时间可能会想到这么写,如下
错误示例:

selectPhotoLabel:this.PhotoLabels[0].Text?this.PhotoLabels[0].Text:"Complete"//照片Lable

可以看到我们在data中赋值selectPhotoLabel时,使用到了PhotoLabels集合进行条件表达式计算,但是这里忽略了一个问题,我们是无法在声明property时用this.property的方式直接将其他property赋值过来的,所以使用这段代码selectPhotoLabel的值始终为undefined。

那怎么解决呢?

- 使用计算属性

说起计算属性,最先想到的一定是computed和watch,这也是Vue中最常用的两种计算属性,二者原则上都能实现动态赋值的功能,但也存在一些不同点,接下来我们看看这两个计算属性的区别。

computed

1.computed用来监控自己定义的变量,该变量不在data里面声明,直接在computed里面定义,然后就可以在页面上进行双向数据绑定展示出结果或者用作其他处理;
2.computed比较适合对多个变量或者对象进行处理后返回一个结果值,也就是多个变量中的某一个值发生了变化则我们监控的这个值也就会发生变化。

watch:

1.watch主要用于监控vue实例的变化,它监控的变量当然必须在data里面声明才可以,它可以监控一个变量,也可以是一个对象;
2.watch一般用于监控路由、input输入框的值特殊处理等等,它比较适合的场景是一个数据影响多个数据

根据业务逻辑需求和二者的特点,我们此处应该使用computed,代码如下:

computed: {
    hasProduct: function () {
      return (
        this.tempProLine.Product != null &&
        this.tempProLine.Product.Id != null &&
        this.tempProLine.Product.Id != undefined &&
        this.tempProLine.Product.Id != ""
      );
    },
    //照片Lable
    selectPhotoLabel:{
      get(){
      return this.PhotoLabels[0]?this.PhotoLabels[0].Text:"Complete";
      },
      set(val){}
    }
  },

computed中的针对属性的赋值方法又会有两种写法,第一种是常规方法,直接return值便可以,第二种则是使用get,set方法,在get中为此属性赋值,在set中定义值改变时需要做的操作。set中的参数val就是改变后的值。

这样我们便实现了给property赋值时需要调用其他property的功能,完美解决了问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue计算属性(computed)是一种能够基于现有的响应式数据进行计算的属性。它们本质上是一个函数,但是可以像普通属性一样在模板使用计算属性的值会根据它的依赖(响应式数据)自动进行更新,只要依赖数据发生变化,计算属性就会重新计算。 计算属性的定义方式如下: ```javascript computed: { propertyName: function() { // 计算逻辑 return value; } } ``` 其propertyName 是计算属性的名称,function 是计算属性的定义。在这个函数,你可以编写任何逻辑来计算属性的值,并在最后使用 return 语句返回计算结果。 在模板使用计算属性的方式与使用普通属性类似。例如,如果有一个计算属性 fullName,我们可以在模板像这样使用它: ```html <p>{{ fullName }}</p> ``` 当 fullName 的依赖数据发生变化时,Vue 会自动更新模板的 fullName 值。 计算属性还有一些特殊的特性: 1. 缓存:计算属性默认是带有缓存的,也就是说,只要依赖数据没有发生变化,多次访问计算属性会立即返回之前的计算结果,而不会重新计算。这是因为 Vue 内部会追踪依赖,并在依赖发生变化时才重新计算计算属性的值。 2. Setter:除了 getter 函数,计算属性还可以定义一个 setter 函数,用于处理对计算属性赋值操作。setter 函数接收新的值作为参数,并可以根据需要对其他相关的响应式数据进行更新。 下面是一个使用计算属性的示例: ```html <template> <div> <input v-model="firstName"> <input v-model="lastName"> <p>{{ fullName }}</p> </div> </template> <script> export default { data() { return { firstName: '', lastName: '' }; }, computed: { fullName: { get() { return this.firstName + ' ' + this.lastName; }, set(value) { const [firstName, lastName] = value.split(' '); this.firstName = firstName; this.lastName = lastName; } } } }; </script> ``` 在上面的示例,我们定义了两个输入框用于输入 firstName 和 lastName。计算属性 fullName 通过 get 函数返回 firstName 和 lastName 的拼接结果。同时,我们也定义了一个 set 函数,用于根据传入的新值更新 firstName 和 lastName 的值。 通过这样的方式,我们可以在模板双向绑定计算属性 fullName,并且在输入框输入 fullName 的值时,会自动更新 firstName 和 lastName 的值。 希望这个详细讲解对你有帮助!如果还有其他问题,请继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值