vue template 新发现的使用数据方式 2021/7/14

我们先来个例子
这是我公司项目中的一部分,前辈写的代码的一部分

	  <a
        href="javascript:;"
        :class="[anchorIndex == 1 ? 'active' : '']"
        v-show="tablistCon2.navigationId"
        @click="clickOffset('loca2', 1)"
      >{{ tablistCon2.navigationTitle }}</a>
      <a
        href="javascript:;"
        :class="[anchorIndex == 2 ? 'active' : '']"
        v-show="tablistCon3.navigationId"
        @click="clickOffset('loca3', 2)"
      >{{ tablistCon3.navigationTitle }}</a>
      <a
        href="javascript:;"
        :class="[anchorIndex == 3 ? 'active' : '']"
        v-show="tablistCon4.navigationId"
        @click="clickOffset('loca4', 3)"
      >{{ tablistCon4.navigationTitle }}</a>

这里我们可以看见,变化的地方,无非就是一些数值上的变化,但是,因为有属性的存在,所以并没有使用v-for循环

然后,我就去想办法使用v-for循环来简化它
然而,这第一次的尝试,并没有成功

		<a
        href="javascript:;"
        :class="[anchorIndex == index ? 'active' : '']"
        v-show="[`tablistCon${item}`].navigationId"
        @click="clickOffset(`loca${item}`, index)"
        v-for="(item,index) in 3" :key="index"
      >{{ [`tablistCon${item}`].navigationTitle }}
      </a>

我发现,这么搞,就不会去在data里面去获取数据,想想也是,有methods,computed等等东西,的确vue没法识别是哪个,于是

		<a
        href="javascript:;"
        :class="[anchorIndex == index ? 'active' : '']"
        v-show="$data[`tablistCon${item}`].navigationId"
        @click="clickOffset(`loca${item}`, index)"
        v-for="(item,index) in 3" :key="index"
      >{{ $data[`tablistCon${item}`].navigationTitle }}
      </a>

然后就成了,$data很少用到,可能是我经验还没有多少多少年吧,突然脑子想到了这种方式去使用。
以此举一反三,如果还有那些有规律的,是否也可以用循环去使用那些对象的属性呢?

还是我前辈们的一部分代码,因为一些不可避免的原因,导致还是有一些由数字区分的属性

 		 if (index == 0) {
           this.$refs.loca1.style.paddingTop = "91px";
         } else if (index == 1) {
           this.$refs.loca2.style.paddingTop = "91px";
         } else if (index == 2) {
           this.$refs.loca3.style.paddingTop = "91px";
         } else if (index == 3) {
           this.$refs.loca4.style.paddingTop = "91px";
         } else if (index == 4) {
           this.$refs.loca5.style.paddingTop = "91px";
         }

于是乎,同样可以用循环去解决这个问题

for(let i=0;i<5;i++){
	if(i==index){
		 this.$refs.[`loca${i+1}`].style.paddingTop = "91px";
		 break;
	}
}

但是,如果这样,我为啥要循环呢,为什么不直接这样

this.$refs.[`loca${index+1}`].style.paddingTop = "91px";

然后我就把我前辈的一堆if-else变成一行代码了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值