vuejs 设置一个单选按钮检查语句是不是为真

Posted

技术标签:

【中文标题】vuejs 设置一个单选按钮检查语句是不是为真【英文标题】:vuejs set a radio button checked if statement is truevuejs 设置一个单选按钮检查语句是否为真 【发布时间】:2016-04-24 06:01:23 【问题描述】:

我正在尝试使用 vuejs v-for 仅在我的 if 语句为真时检查单选按钮。有没有办法使用 vuejs 的 v-if/v-else 来解决这类问题?

phphtml 中,我可以通过执行以下操作来实现:

<input type="radio" <? if(portal.id == currentPortalId) ? 'checked="checked"' : ''?>>

以下是我目前使用 vuejs 所做的:

    <div v-for="portal in portals">
     <input type="radio" id="portal.id" name="portalSelect"
       v-bind:value="id: portal.id, name: portal.name"
       v-model="newPortalSelect"
       v-on:change="showSellers"
       v-if="portal.id == currentPortalId"
       checked="checked">
     <label for="portal.id">portal.name</label>
    </div>

我知道这里的 v-if 语句用于检查是否显示或隐藏输入。

非常感谢任何帮助。

【问题讨论】:

【参考方案1】:

以下是跟踪所选单选按钮的示例,通过

将值绑定应用到对象 (:value="portal") 和 将 v-model 绑定应用到当前选定的对象 (v-model="currentPortal")。

当两者匹配时,单选按钮将由 Vue 自动检查(不需要:checked 绑定!)。

带有组合 API 的 Vue 3

Vue.createApp(
  setup() 
    const portals = [
      id: 1,
      name: "Portal 1"
    , 
      id: 2,
      name: "Portal 2"
    ];
    
    const currentPortal = portals[1];
    
    return 
      portals,
      currentPortal
    
  
).mount("#app");
<script src="https://unpkg.com/vue@next"></script>

<div id="app">
  <template v-for="portal in portals">
    <input 
      type="radio" 
      :id="portal.id"
      name="portalSelect" 
      :value="portal" 
      v-model="currentPortal">

    <label :for="portal.id">portal.name</label>
  </template>
</div>

【讨论】:

【参考方案2】:

如果您可以根据自己的逻辑进行调整,则可以遵循以下选项:

<div class="combination-quantity">
    <input type="radio" value="Lost" 
    v-model="missing_status">
    <label for="lost">Lost</label>
    <br>
    <input type="radio" value="Return Supplier" v-model="missing_status">
    <label for="return_supplier">Return Supplier</label>
</div>

missing_status 的值可以是“丢失”或“返回供应商”,并且会根据值自动选择单选选项。

【讨论】:

【参考方案3】:

也许有人觉得这种方法有用:

在模板中,我为每个单选按钮分配一个值:

<input type="radio" value="1" v-model.number="someProperty">
<input type="radio" value="2" v-model.number="someProperty">

然后在组件中我设置值,即:

data: function () 
    return 
        someProperty: 2
    

在这种情况下,vue 将选择第二个单选按钮。

【讨论】:

【参考方案4】:

在处理无线电和 vue.js 时,我想指出一些选项。通常,如果您需要动态绑定属性值,您可以使用速记绑定语法来绑定并计算该值。您可以绑定到数据、计算值或方法以及三者的组合。

new Vue(
  el: '#demo',
  data() 
    return 
      checkedData: false,
      checkedGroupVModel: "radioVModel3", //some defaul
      toggleChecked: false,
      recalculateComputed: null
    ;
  ,
  computed: 
    amIChecked() 
      let isEven = false;
      if (this.recalculateComputed) 
        let timeMills = new Date().getMilliseconds();
        isEven = timeMills % 2 === 0;
      
      return isEven;
    
  ,
  methods: 
    onToggle() 
      this.toggleChecked = !this.toggleChecked;
      return this.toggleChecked;
    ,
    mutateComputedDependentData() 
      this.recalculateComputed = ;
    
  
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
<div id="demo">
  <div>
    <div>
      <span>Simple Radio Group - Only one checked at a time. Bound to data.checkedData</span><br>
      <label>Radio 1 - inverse of checkedData = !checkedData
        <input type="radio" name="group1" value="radio1" :checked="!checkedData">
      </label><br>
      <label>Radio 2 - checkedData = checkedData
        <input type="radio" name="group1" value="radio2" :checked="checkedData">
      </label><br>
      <span>Understanding checked attribute: https://developer.mozilla.org/en-US/docs/Web/HTML/Element/input#attr-checked</span>
    </div>
    <br>
    <div>
      <span>Simple Radio - Checked bouned to semi-random computed object</span><br>
      <label>Radio 1: amIChecked
        <input type="radio" :checked="amIChecked">
      </label> &nbsp;
      <label>Recalculate Computed Value
        <button type="button" @click="mutateComputedDependentData">Click Me Several Times</button>
      </label>
    </div>
    <br>
    <div>
      <span>Simple Radio Group - v-model bound value = checkedGroupVModel</span><br>
      <label>Simple Radio 1:
        <input type="radio" name="vModelGroup" value="radioVModel1" v-model="checkedGroupVModel">
      </label><br>
      <label>Simple Radio 2:
        <input type="radio" name="vModelGroup" value="radioVModel2" v-model="checkedGroupVModel">
      </label><br>
      <label>Simple Radio 3:
        <input type="radio" name="vModelGroup" value="radioVModel3" v-model="checkedGroupVModel">
      </label>
    </div>
    <br>
    <div>
      <span>Simpe Radio - click handler to toggle data bound to :checked to toggle selection</span><br>
      <label>Toggle Radio = toggleChecked
        <input type="radio" :checked="toggleChecked" @click='onToggle()'>
      </label>
    </div>
  </div>
</div>

【讨论】:

【参考方案5】:

您可以像这样绑定checked 属性:

<div v-for="portal in portals">
  <input type="radio"
         id="portal.id"
         name="portalSelect"
         v-bind:value="id: portal.id, name: portal.name"
         v-model="newPortalSelect"
         v-on:change="showSellers"
         :checked="portal.id == currentPortalId">

  <label for="portal.id">portal.name</label>
</div>

简单示例:https://jsfiddle.net/b4k6tpj9/

【讨论】:

@Bharat 我认为 jsfiddle 只是为了表明上述问题归结为了解绑定到诸如选中的属性的能力。这是速记的文档:v1 - v1.vuejs.org/guide/syntax.html#Shorthands v2 - vuejs.org/v2/guide/syntax.html#Shorthands

以上是关于vuejs 设置一个单选按钮检查语句是不是为真的主要内容,如果未能解决你的问题,请参考以下文章

VueJs Checked 单选按钮组

如何检查单选按钮是不是在 Android 的单选组中被选中?

如何通过检查另一个单选按钮来设置选中的单选按钮

输入类型单选按钮检查 else 语句在 jquery 中不起作用

如何检查“单选按钮”是不是被选中?

如何检查是不是使用 JavaScript 选择了单选按钮?