1

如果我解释得不好,请提前抱歉,我对此有点新手。

如果我有一个包含多个类似于下面的对象的数组,如何在 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},
           ]
4

1 回答 1

1

我试图模拟解决方案以适合您的情况,下面的卡表示模式,当检查/取消选中复选框时,表中的值将更改,您还根据其visibility状态隐藏/显示该项目,如下:

   <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>

于 2018-10-10T01:14:20.263 回答