【问题标题】:Toggle property by toggling checkbox Vue.js通过切换复选框 Vue.js 来切换属性
【发布时间】:2019-03-14 18:58:52
【问题描述】:

抱歉,如果我解释得不好,我在这方面有点新手。

如果我有一个包含多个类似于下面的对象的数组,如何在 Vue 中取消选择/选择模式中的复选框以根据其名称切换 visible 属性的值?我只想显示具有可见性的项目。

目前,我有一个模式弹出窗口,它显示每个对象的名称属性以及一个复选框。当我取消选中/选中一个或多个名称旁边的文本框时,我希望根据visibility 更新列表。

我正在想象逻辑是; 如果未选中复选框,则将可见性设置为 false

下面的代码基本上是我要解释的内容的大纲,我知道它的语法并不完美,它更像是一个视觉指南,试图展示我所问的内容。

再次抱歉,如果我解释得不好。

非常感谢您的帮助

<!-- this would be in my modal -->
    <div>
        <input type="checkbox"
               value="usd" />
        <label for="usd">USD</label>
    </div>
        <div>
        <input type="checkbox"
               value="cad"/>
        <label for="cad">CAD</label>
    </div>
<!-- End modal -->

<section v-for="loop through MyArray" v-show="myArray.visible">
  <div>{{name}}</div>
  <div>{{value}}</div>
  <div>{{another}}</div>
  <div>{{high}}</div>
  <div>{{low}}</div>
</section>

    myArray[
            {
             name:"USD",
             value: 0.75,
             another: 0,
             high: 0,
             low: 0,
             visible:true},
            {
             name:"CAD",
             value: 1.75,
             another: 0,
             high: 0,
             low: 0,
             visible:true},
           ]

【问题讨论】:

    标签: vue.js checkbox vuejs2 toggle conditional-rendering


    【解决方案1】:

    我试图模拟一个解决方案要适合您的情况,下面的卡代表了一个模态,当检查/取消选中的复选框时,您还会改变表中的值,您还根据其@ 987654321隐藏/显示该项目@状态喜欢:

       <div class="flex" v-if="item.visible">...</div>
    

    new Vue({
      el: '#app',
    
      data() {
        return {
         myArray:[
                {
                 name:"USD",
                 value: 0.75,
                 another: 0,
                 high: 0,
                 low: 0,
                 visible:true},
                {
                 name:"CAD",
                 value: 1.75,
                 another: 0,
                 high: 0,
                 low: 0,
                 visible:true},
               ],
               selectedItem:{visible:false}
         
         }
      },
     methods:{
           setVisible(){
        
          this.myArray= this.myArray.filter((item)=>{
            if(item.name===this.selectedItem.name){
           item.visible=this.selectedItem.visible;
           return item;
            }else{ return item}
           
           })
           }
      }
      
      });
    .flex{
    display:flex;
    justify-content:space-between;
    align-items:center;
    padding:10px;
    }
    
    .mymodal{
    padding:50px;
    box-shadow:1px 1px 4px #555;
    }
    <link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap/dist/css/bootstrap.min.css"/>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>
    
       <div id="app" class="container">
         <section v-for="item in myArray" >
            <div class="flex">
              <div>{{item.name}}</div>
              <div>{{item.value}}</div>
              <div>{{item.another}}</div>
              <div>{{item.high}}</div>
              <div>{{item.low}}</div>
               <div>{{item.visible}}</div>
              <div><button class="btn btn-primary" @click="selectedItem=item"> Show details</button></div>
            </div>
          </section>
        
    
        <div class="mymodal" v-if="selectedItem.visible">
            <input type="checkbox"
                   v-model="selectedItem.visible" @change="setVisible">
            <label for="cad">{{selectedItem.name}}</label>
        </div>
        </div>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-26
      • 1970-01-01
      • 2012-12-06
      相关资源
      最近更新 更多