vant2 级联选择器 van-cascader 实现部分选项禁用

说明:“vant”: “^2.12.42”;级联下拉框没有通过一个disabled就能实现禁用其中某些选项的功能;如果你用的vant3/4,请忽略此文章去看官网。
先上效果图
请添加图片描述

      <van-cascader
        :title="fieldName"
        ref="cascader"
        v-model="cascader"
        :options="options"
        :closeable="false"
        :field-names="fieldMapping"
        @close="projectsShow = false"
        @finish="finish"
      >
        <template slot="title">
          <div class="cascader-title">
            <div class="operation-button" @click="cancel">取消</div>
            <div>{{ fieldName }}</div>
            <div class="operation-button" @click="confirm">确定</div>
          </div>
        </template>
        <template #option="{ option }"> 
		// 自定义渲染列表,利用复选框自带的禁用disabled,对应的disabledFlag是拿到数据后自己根据需求加的
          <van-checkbox
            v-model="projectObj[option.id]"
            @click="handleChecked(option)"
            :disabled = option.disabledFlag
          >
          // 自定义复选框 隐藏掉前面的小方框
            <template slot="icon">
              <img style="display: none" />
            </template>
            <div>{{ option[label] }}</div>
          </van-checkbox>
        </template>
      </van-cascader>
   // 树状图数据
    getTree() {
      this.$api
        .post(this.url, { code: this.code })
        .then((res) => {
          if (res.success || res.isSuccess) {
            let useOptions = res.data;
            // 获取到接口返回的级联数据,然后送去添加自己要的flag
            this.options = this.setDisableOption(useOptions);
          } else {
            this.$notify.error({
              title: "失败",
              message: "获取数据失败",
            });
          }
        })
        .catch((e) => {
          this.$notify.error({ title: "失败", message: e.message });
        })
        .finally(() => {
          this.loading = false;
        });
    },
    // 设定disabled 
    setDisableOption(data) {
      let afterArray = data.map((item) => {
      // children 是子数组
        if (
          item.children === undefined ||
          item.children === null ||
          item.children.length === 0
        ) {
        	//如果子数组是空,说明是该支路最底端 如果是user说明是人,可以选;如果不是,说明是没有下属人员的部门,不可选
          if (item.nodeType === "user") {
            item.disabledFlag = false;
          } else {
            item.disabledFlag = true;
          }
        } else {
        	// children 不为空,说明不是最终节点,可以选,递归判断下一级直到结束
          item.disabledFlag = false;
          this.setDisableOption(item.children);
        }
        return item;
      });
      return afterArray;
    },
    // 确认
      confirm() {
      if ( this.obj.nodeType === "user" ) {
      //  关闭弹框 数据传给外面页面
        this.projectsShow = false;
        this.$emit("confirm", this.obj);
      } else {
      // 未选中人 就点确定 提示一下
        this.$message.error("请选择人员");
      }
    },
      finish(val) {
      var index = val.selectedOptions.length - 1;
      this.obj = val.selectedOptions[index];
    },
// 隐藏掉禁用数据 点击时 后面自动生成的对号
/deep/.van-checkbox.van-checkbox--disabled + i {
    display: none;
}

总结:级联自定义列表为复选框,复选框自定义隐藏掉小方框;数据根据业务添加flag确认该选项是否禁用,该flag用于绑定复选框disabled;最后的样式是点击禁用的数据是,级联选择器也会默认在最后面打勾,隐藏掉。最后,在点击确认时,验证数据,confirm方法根据自身需求,提示请选择之类的

### 回答1: Vant 组件库中的 van-cascader 组件通常是用于显示级联选择框,如果你希望清除它的历史选择记录,可以在使用 van-cascader 组件时动态设置其 value 属性: ``` <van-cascader :value="[]" /> ``` 这样可以将选择值清空为空数组,从而清除历史选择记录。 ### 回答2: 要清除vant van-cascader的历史选择记录,需要进行以下步骤: 1. 找到van-cascader组件所在的父组件。一般来说,van-cascader是在一个表单或者可编辑的页面中使用的,所以可以定位到对应的表单组件或页面组件。 2. 在父组件的data中添加一个变量,用来保存van-cascader的选择值。 3. 在父组件的methods中添加一个方法,用来处理清除历史选择的逻辑。可以命名为clearCascaderHistory()。 4. 在clearCascaderHistory()方法中,将van-cascader的选择值设置为初始状态或空值,即将父组件data中保存的变量重置为初始值或空值。 5. 在van-cascader组件中,通过v-model绑定选择值的变量,将其与父组件data中的变量保持同步。 6. 在van-cascader组件的props中添加一个属性,例如need-clear-history,用来指定是否需要清除历史选择记录。 7. 在父组件中使用van-cascader时,根据需求设置need-clear-history属性。当需要清除历史选择记录时,将need-clear-history设置为true;否则,设置为false或不设置,默认为false。 8. 在父组件的watch中监听need-clear-history的变化,当need-clear-history变为true时,调用clearCascaderHistory()方法清除历史选择记录。 通过以上步骤,就可以实现清除vant van-cascader的历史选择记录。在需要清除记录的时候,设置相应的属性即可清除历史选择。 ### 回答3: 要清除vant van-cascader的历史选择记录,可以按照以下步骤进行操作: 1. 找到vant van-cascader组件所在的代码文件。一般来说,该组件会被引入到一个Vue组件中。 2. 在该Vue组件中,找到使用vant van-cascader的地方。一般会有一个包含vant van-cascader的template标签。 3. 在template标签中,找到vant van-cascader的属性列表,并查看是否有与历史选择记录相关的属性。通常,vant van-cascader会提供一个名为"clearable"或"clearable"的属性来控制是否可以清除历史选择记录。 4. 如果存在"clearable"或"clearable"属性,将其设置为true,以允许清除历史选择记录。例如: <van-cascader :clearable="true"></van-cascader> 5. 保存文件并重新加载应用程序。现在,用户在使用vant van-cascader组件时,将会看到一个清除按钮。点击该按钮即可清除历史选择记录。 如果以上步骤无法清除历史选择记录,可能需要进一步查看vant van-cascader组件的文档或查看相关代码,以确定是否有其他特殊属性或方法可以清除历史选择记录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值