Vue html中设置变量

博客讨论了在 Vue 模板中如何定义变量,特别是在 `v-for` 循环中避免重复计算表达式的方法。作者遇到的问题是,由于在模板中直接赋值会导致变量在循环结束后只保留最后一个值,因此提出了在隐藏 `span` 标签中赋值的解决方案,以供后续元素使用。作者也表达了对使用 `render()` 函数优化模板的兴趣,但最终选择了更简单的当前方案,并希望得到社区的正统解决建议。
摘要由CSDN通过智能技术生成

项目场景:

最近突发奇想:vue 在html中怎么定义变量?

<template>
	<div class="tr" v-for="(row, rowIndex) in data" :key="rowIndex">
                <div class="td " v-for="(column, colIndex, value) in columns" :key="colIndex" >
                    <span style="display: none;"></span>
                    <slot :row="row" :rowIndex="rowIndex" 
                        :column="column" :colIndex="colIndex"
                        :value="row[column.prop]"
                        v-if="column.slotName" 
                        :name="column.slotName" />
                        
                    <div v-else class="popper_item_container"
                        @mouseover="mouseover($event, typeof column == 'string' ? row[column] : row[column.prop])"
                        @mouseleave="mouseleave"
                        :style="{width: column.width}">
                        {{ typeof column == "string" ? row[column] : row[column.prop] }}
                    </div>
                            
                </div>
            </div>
</template>

typeof column == “string” ? row[column] : row[column.prop]这句代码多次用到,如果能付给一个变量就好了

思路:

开始想在代码中直接加{{ 变量a = typeof column == “string” ? row[column] : row[column.prop]}},理论上将,此时的变量a应该是this的一个属性,是一个全局的(对于当前页面来说)。所以处于for循环中的变量a,最终只能是循环最后一个值,就会导致某些地方显示出现问题。
然后觉得用render()这个东西再js写模板应该不会有现在这种尴尬吧,为了这个问题要重写吗,应该还有别的决绝方案。


解决方案:

<div class="tr" v-for="(row, rowIndex) in data" :key="rowIndex">
                <div class="td " v-for="(column, colIndex, value) in columns" :key="colIndex" >
                <!--最终在for循环中加了个value参数来声明变量,
                在此加了个隐藏的span来赋值
                (应该可以在第一次用的地方赋值,
                其他地方就可以直接使用value)-->
                    <span style="display: none;">{{ value = typeof column == "string" ? row[column] : row[column.prop] }}</span>
                    <slot :row="row" :rowIndex="rowIndex" 
                        :column="column" :colIndex="colIndex"
                        :value="row[column.prop]"
                        v-if="column.slotName" 
                        :name="column.slotName" />
                        
                    <div v-else class="popper_item_container"
                        @mouseover="mouseover($event, value)"
                        @mouseleave="mouseleave"
                        :style="{width: column.width}">
                        {{ column.format? column.format({value, row, rowIndex, column, colIndex}) : value }}
                    </div>
                            
                </div>
            </div>

突然来的灵感,虽然不是什么正统写法,但也可解决问题。
有大神知道这类问题有什么正统写法,欢迎留言赐教。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值