van-picker实现薪资选取二级联动

        最近项目需要实现一个薪资选取的多列级联组件,我选取了 van-picker 来实现项目需求。薪资上限随下限动态变化。

效果如下:

 代码如下(删减版):

<div class="flex">
    <div class="f-paragraph">您的期待薪资是</div>
    <div v-if="(Label.Snum??0) !== 0">
        预计年薪(12薪):{{ minAnnual }}w-{{ maxAnnual }}w
    </div>
</div>
<div class="content" @click="salaryCellShow = true">
    <van-field v-model="salary" readonly />
</div>
const salaryPicker = ref()
let salaryCellShow = ref(false)
const column = reactive(['面议', '1k', '2k', '3k', '4k', '5k', '6k', '7k', '8k', '9k', '10k', '11k', '12k', '13k', '14k', '15k', '16k', '17k', '18k', '19k', '20k', '21k', '22k', '23k', '24k', '25k', '26k'])
const salaryColumns = [
    // 第一列
    { values: column.slice(0, 26), defaultIndex: Label.Snum },
    // 第二列
    { values: column.slice(Label.Snum+1, Label.Snum+5) },
]
const salaryChange = (value: any) => {
    let n = Number(value[0].replace(/[^0-9]/ig,""))
    if(Label.Snum != n) {
    Label.Snum = n
    if(n===0) salaryPicker.value.setColumnValues(1,['面议']);
    else salaryPicker.value.setColumnValues(1,column.slice(n+1,n+6))
  }
}
const salaryConfirm = (value: any) => {
    let n1 = Number(value[0].replace(/[^0-9]/ig,""))
    let n2 = Number(value[0].replace(/[^0-9]/ig,""))
    Label.Snum = n1
    // 根据实际情况设置属性值
    // form.minSalary = n1 * 1000
    // form.maxSalary = n2 * 1000
    // ...
    salaryCellShow.value = false
}

和我一样滴萌新的知识点复习时间:

 v-if = "( Label.Snum ?? 0 ) !== 0"

  •  v-show 和 v-if

实现方式编译过程编译条件性能消耗
v-show修改display属性。简单的CSS切换。任何条件下都编译、缓存,且DOM元素始终被保留。更高的初始渲染消耗。
v-if根据引号内真假值判断直接从DOM树上删除或重建元素节点。有一个局部编译/卸载的过程,切换过程中合适的销毁和重建内部的事件监听和子组件。有惰性,若初始条件为假,则什么也不做,为真时才开始局部编译。更高的切换消耗。

        v-show 和 v-if 一起使用时 v-if 优先级更高。

  • ??(空值合并运算符)

        当左侧操作数为 null 或 undefined 时,返回右侧操作数,否则返回左侧操作数。

value[0].replace(/[^0-9]/ig, "")

  • 正则表达式

/i忽略大小写
/g全文查找出现的所有匹配字符

问题

 其实是对照BOSS直聘做的,但是人家的非常丝滑呢 o(╥﹏╥)o

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
u-picker组件是uView UI框架中的一个选择器组件,用于选择单个或多个值。要实现省市二级联动,需要引入省市数据源,并将其传递给u-picker组件。 以下是实现步骤: 1. 引入省市数据源 在uView官网下载省市数据源(https://www.uviewui.com/components/picker.html#%E7%9C%81%E5%B8%82%E5%8C%BA%E9%95%BF%E9%80%89%E6%8B%A9%E5%99%A8%EF%BC%88%E4%BA%8C%E7%BA%A7%E8%81%94%E5%8A%A8%EF%BC%89),并将其放到项目中。 2. 在页面中引入u-picker组件 ``` <template> <view> <u-picker ref="picker" :title="'请选择省市'" :data="data" @confirm="onConfirm"></u-picker> </view> </template> <script> import uPicker from '@/uview-ui/components/u-picker/u-picker.vue' export default { components: { uPicker }, data() { return { data: [] } }, mounted() { this.loadCityData() }, methods: { loadCityData() { // 引入省市数据源并解析 const cityData = require('@/static/city.json') let data = [] cityData.forEach(province => { let cities = [] province.children.forEach(city => { cities.push({text: city.name, value: city.name}) }) data.push({ text: province.name, children: cities }) }) this.data = data }, onConfirm(selected) { console.log('selected', selected) } } } </script> ``` 3. 在onConfirm方法中获取选择结果 ``` onConfirm(selected) { console.log('selected', selected) } ``` 以上代码实现了省市二级联动的u-picker组件。在选择省份后,会自动加载该省份下的城市列表,并且可以选择其中一个城市。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值