【问题标题】:Conditional rendering based on checkbox input in Vue.jsVue.js 中基于复选框输入的条件渲染
【发布时间】:2018-12-05 13:08:48
【问题描述】:

我正在尝试根据 Vue 中的用户输入有条件地呈现表单元素,但进展不顺利。我知道如何使用 VanillaJS 或 jQuery 来做到这一点,但我正在努力将这些知识转化为使用 Vue 的内置条件指令。我正在使用带有来自 vue-cli 的 webpack 模板的单文件组件。

来自我的<template>

<form autocomplete="off" name="loadDeets" id="loadDeets" class="loadDeets">
    <div class="form-group row">
       <label>Date</label>
       <flat-pickr v-model="date"
              :config="{dateFormat: 'l, F j'}"
                class="form-control" 
                placeholder="Select date"               
                name="date"></flat-pickr>
    </div>

    <div class="row">
        <div class="form-group col left">
           <label>Time</label>
           <flat-pickr v-model="time"
                :config="config"
                class="form-control" 
                placeholder="Select time"               
                name="time1"></flat-pickr>
        </div>

        <div class="form-group col right">
            <label>Time</label>
            <flat-pickr
                :config="config"
                class="form-control" 
                placeholder="Select time"               
                name="time2" v-show="document.getElementById('apptCheck').checked"></flat-pickr>
        </div>
    </div>

    <div class="form-check">
        <input class="form-check-input" type="checkbox" id="apptCheck">
        <label class="form-check-label" for="apptCheck">
           Appointment?
        </label>
    </div>
 </form>

这完全破坏了页面的组件呈现。因此,我尝试根据 Vue 文档中的此页面使用 v-model 。 https://vuejs.org/v2/guide/forms.html#v-model-with-Components

<div class="row">
   <div class="form-group col left">
      <label>Time</label>
      <flat-pickr v-model="time"
           :config="config"
            class="form-control" 
            placeholder="Select time"               
            name="time1"></flat-pickr>
    </div>

    <div class="form-group col right">
       <label>Time</label>
       <flat-pickr
           :config="config"
            class="form-control" 
            placeholder="Select time"               
            name="time2" v-show="vm.checked == true"></flat-pickr>
    </div>
 </div>

 <div class="form-check">
    <input class="form-check-input" type="checkbox" value="checked" id="apptCheck" v-model="checked">
    <label class="form-check-label" for="apptCheck">
        Appointment?
    </label>
 </div>

不幸的是,这也破坏了页面。

我不完全确定如何从这里开始。我没有正确地考虑这一点吗? v-if/v-show 不是要与其他元素的输入一起使用吗?

【问题讨论】:

  • vm.checked 中丢失vm 并使用v-show="checked"
  • 感谢您提供的示例,它帮助我解决了杰夫的回答中的另一个难题!
  • 不客气,阿曼达!如果您有任何疑问,请随时提出问题。
  • 您是否对两个复选框使用相同的数据属性?如果是这种情况,v-model 指向同一个属性checked,而您应该有两个不同的属性,每个复选框一个。例如,data() { return { pickupChecked: false, deliveryChecked: false } }。一个应该有v-model="pickupChecked",另一个应该有v-model="deliveryChecked"

标签: javascript vue.js conditional-rendering


【解决方案1】:

您的第二个示例是执行此操作的正确方法,您永远不需要在 Vue 中通过 ID 访问元素。您可以访问组件中的所有变量,因此您不需要vm.,只需v-show="checked"

   <flat-pickr
       :config="config"
        class="form-control" 
        placeholder="Select time"               
        name="time2" v-show="checked"></flat-pickr>

确保您也在数据函数中实例化checked。您可以在起始数据中将其设置为等于true,而不是将value="checked" 放在该元素上以开始,v-model="checked" 将自动检查它。

【讨论】:

  • 有没有一种简单的方法可以做到这一点,但不是隐藏按钮,而是将其变灰并使其无法点击?看起来很简单,但我找不到它。
  • 如果checked 变量为真,@BigGuy &lt;button :disabled="checked"&gt; 将被禁用。
猜你喜欢
  • 2018-11-12
  • 2020-03-09
  • 2020-07-10
  • 1970-01-01
  • 2017-05-31
  • 2016-02-07
  • 2020-08-25
  • 2017-10-09
  • 2019-08-07
相关资源
最近更新 更多