vue计算属性可以传参吗


<td v-for。。 :background="baseUrl+s.image.images[0]"

有的时候images可能是个空数组 这样绑定 一旦遇到空数组会报错 该如何兼容处理一下

我想到的是计算属性 但是可以把这个值传进去处理吗

阅读 44.3k
8 个回答

计算属性不能传值,只能利用已有参数做出相应的某种变化,想使用灵活需要内部依赖的参数变化来调整;
使用methods来做,根据传参返回不同的值。

methods: {
    convertUrl (params) {
        if () {...}
        else {...}
        
        or
        
        switch () {...}
        
        or something else...
    }

}

谁说传不了参的,闭包忘了?

:data="closure(item, itemName, blablaParams)"

computed: {
 closure () {
   return function (a, b, c) {
        /** do something */
        return data
    }
 }
}

亲测有效

不要认为 这里data 赋值不了给 :data

这里是return 一个 匿名函数, 实际 :data 绑定的是这个匿名函数, data 是可以return 的!

明明正确正常合规的回答,居然还有人举报,连正常的技术讨论也有小人来参合吗???!!!
有任何异议欢迎来辩

关于 评论中提到的,能否触发缓存结果,我做了一个试验

{{cacheSome('a')}}

cacheSome () {
  let _now = Date.now()
  return function (a) {
    return _now + a
  }
}

应该也是能起到触发缓存的结果


computed:{
   bg(){
      let {baseUrl,s} = this
      return s.image.images[0]?baseUrl+s.image.images[0]:''
   }
}

:background="bg"

不妨试试早点处理,当它为非空数组才编译。

<td v-if="image.images.length !== 0" v-for="..." :background="baseUrl+s.image.images[0]">...</td>

建议可以这样来写:
<td v-for。。 :background="baseUrl + (s.image.images.length ? s.image.images[0] : 'defaultImg.png')">

在使用了 vuex 后的 getters函数 是可以传参数的

推荐问题
宣传栏