Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
2.9k views
in Technique[技术] by (71.8m points)

请问,vue中methods传参,改成 computed计算属性 然后返回一个函数的写法有什么区别吗,那种更好或者都一样?

先上代码:
html:

<ul id="app">
    <li 
        v-for="item in 20" 
        :class="computedClass(item)" 
        @click="clickIndex = item"
    >{{item}}</li>
</ul>

js:

    data:{
        clickIndex:-1
    },
    methods:{
        methodsClass(index){
            console.log('methodsClass')
            return this.clickIndex === index ? 'red' : '';
        },
    },
    computed:{
        computedClass(){
            console.log('computedClass')
            return (index) => {
                console.log(index)
                return this.clickIndex === index ? 'red' : '';                    
            }
        }
    }
    

需求:我有个class,需要动态绑定,而且需要传入参数。

  1. 如果用 methods 中的方法的话,如果有20个元素,每点击其中一个元素一次,就会执行20次方法。
  2. 如果换成 computed 中的计算属性 ,只执行一次,但是返回的闭包也会执行20次。

问题:

  1. 这两种方式哪种更好,为什么?或者是说都一样?
  2. 对于这种情况有没有更好的解决办法

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

如果第二个问题有答案,那第一个问题就不存在
正确姿势:

<li 
        v-for="item in 20" 
        :class="{red:item===clickIndex}" 
        @click="clickIndex = item"
    >{{item}}</li>

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...