当前位置: 首页 > 知识库问答 >
问题:

vue.js - 如何在 Vue 中创建一个响应式函数以检查对象属性是否都有值并启用按钮?

贝钧
2024-07-10
问题遇到的现象和发生背景

需求是这样的,在页面中有一个表单,表单里多个输入绑定了多个值,
下一步的按钮默认是禁用状态,因为该对象中每个数据的值都是false,而启用的条件就是三个值都有值的情况下才会启用

  const pickerValue = ref<{
    [key: string]: string;
  }>({
    tem: "",
    building: "",
    date: ""
  });

所有需要这么一个函数来监听传入值的变化,但是这样传值找到具体的 pickerValue.value.date 会丢失响应性

  const disabledNext = useCheckEmptyValues([pickerValue.value.tem, pickerValue.value.building, pickerValue.value.date]);

所有这个方法应该怎么编写呢.

不能创建多个变量记录状态,
useCheckEmptyValues 方法负责传入值的空值判断,如果全传入的值中但凡有一个值为非正常值状态,则返回false,否则返回true
返回的状态要用于按钮的disabled状态,所以返回的状态需要是一个响应式变量

useCheckEmptyValues 方法必须是个通用方法,因为页面中不一定会传入哪些值,多少值,所以要有很高的适应性

import { ref, watch } from "vue";

function useCheckEmptyValues(values) {
  const allValuesFilled = ref(false);


  return allValuesFilled;
}

export default useCheckEmptyValues;

这是我之前写的,不大行

function useWatch(values) {
  const hasEmptyValue = ref(false);

  const checkValues = () => {
    hasEmptyValue.value = values.some((value) => {
      if (value === null || value === undefined || value === "") {
        return true;
      }
      if (Array.isArray(value)) {
        return value.length === 0;
      }
      if (typeof value === "object") {
        return Object.keys(value).length === 0;
      }
      return false;
    });
  };

  // Watch each value in the values array
  values.forEach((value) => {
    watch(value, checkValues, { immediate: true, deep: true });
  });

  return computed(() => {
    console.log("1");
    return hasEmptyValue.value;
  });
}

export default useWatch;

共有1个答案

拓拔谭三
2024-07-10
const picker = ref<{
    [key: string]: string
  }>({
    tem: '',
    building: '',
    date: '',
  }),
  flag = computed(() =>
    Object.entries(picker.value).some(
      ([, v]) =>
        v === null ||
        v === undefined ||
        v === '' ||
        (Array.isArray(v) && v.length === 0) ||
        (typeof v === 'object' && Object.keys(v).length === 0)
    )
  )
 类似资料:
  • 问题内容: 我试图检查对象数组中是否存在特定项目(属性值),但找不到任何解决方案。请让我知道,我在这里想念的是什么。 问题答案: 您可以像这样过滤数组: 它将返回匹配闭包中指定条件的元素数组-在上述情况下,它将返回包含所有属性等于1的元素的数组。 由于您需要布尔结果,因此只需执行以下检查: 如果过滤后的数组至少包含一个元素,则为true

  • 问题内容: 在遍历数组时,我需要一些帮助,我会不断卡住或重新发明轮子。 如何检查数组中是否有两个(或多个)相同的名称值?我不需要计数器,只需在数组值不是唯一的情况下设置一些变量即可。请记住,数组长度是动态的,数组值也是动态的。 问题答案: 使用array.prototype.map和array.prototype.some:

  • 问题内容: 如何检查对象在JavaScript中是否具有特定属性? 考虑: 那是最好的方法吗? 问题答案: 我对所给出的答案感到困惑-他们中的大多数都是完全错误的。当然,您可以拥有具有未定义,空值或假值的对象属性。因此,简单地将属性检查减少到甚至更糟,将给您完全误导的结果。 这取决于您要查找的内容。如果您想知道一个对象是否物理上包含一个属性(并且它不是来自原型链的某个地方),那么您就可以这样做。所

  • 问题内容: 如何检查以下json中数组中的至少一个元素是否具有具有值的属性? 目前,我正在使用06版草案(此处为 FAQ )。 这是我的NOT WORKING模式: 问题答案: 我设法用弄清楚了。在此版本中,添加了新的关键字。根据此规范草案: 包含 此关键字的值必须是有效的JSON模式。如果数组实例的至少一个元素对给定架构有效,则该数组实例对“包含”有效。 工作模式:

  • 我想通过将变量传递到参数来检查using function是否在对象中存在该属性。我尝试了所有三种常用的方法来检查对象的现有属性,但仍然得到了未定义的输出。有人能告诉我哪里错了吗?。

  • 问题内容: 我正在寻找C / C ++中相当于Java的指针比较。 假设我正在从第三方调用类的对象的getSomething()方法。我怎么知道getSomething()的实现是每次只是返回 相同的实例, 还是返回对象的不同实例?我 不是 要检查两个对象是否相同,而是需要检查它们是否是相同实例。这样做的动机是,如果第三方实现每次都创建一个新实例,则可能可以通过不每次都调用该方法来优化代码。假设在

  • 我创建了一个对象数组,如下所示: 我正在尝试创建一个新数组,该数组过滤位置,使其仅包含不具有相同城市属性的对象(lat/lng重复项可以)。是否有内置的JS或Jquery函数来实现这一点?

  • 请看do while循环,我认为注释是不言自明的。我想检查该集合是否设置了所有具有符号a、b、c、d的卡片(借助数组或其他任何东西实现它)。