【问题标题】:Need To Access an Array of Objects with Vue.js需要使用 Vue.js 访问对象数组
【发布时间】:2019-07-23 22:41:54
【问题描述】:

当用户选择一台机器时,我得到机器的 id。我需要从该 id 获取机器的品牌和型号。

    <ul class="list-unstyled">
          <li>
              <div v-for="dosimeter in dosimeters">
                 <label>
                    <input type="radio" name="optDosimeter" v-model="dosimeter_id" :value="dosimeter.id" v-on:click="dosimeter_select">{{dosimeter.nickname}}
                 </label>
              </div>
           </li>
     </ul>

Vue.js

    export default {
        data: function() {
            return {
              dosimeters:[],
              dosimeter_id:''
       }
     },
     mounted(){
        axios.get('/dosimeters').then((response) => {
                this.dosimeters=response.data;
            });
     },
     methods: {
         dosimeter_select(){
                not sure what to put here
            }
     }
  }

【问题讨论】:

    标签: javascript laravel vue.js vuejs2 axios


    【解决方案1】:

    我认为你应该这样做:

      dosimeter_select(){
              let found= this.dosimeters.find(d=>{
                    return d.id==this.dosimeter_id
                });
    
             console.log(found.make);
             console.log(found.model);
            }
    

    【讨论】:

    • 我试过你的建议,它有效,但需要点击两次。第一次单击显示“未定义”,然后选择另一个单选按钮,我得到了预期的品牌和型号。有什么想法吗?
    • 尝试使用on:input事件而不是像&lt;input type="radio" name="optDosimeter" v-model="dosimeter_id" :value="dosimeter.id" v-on:input="dosimeter_select"&gt;{{dosimeter.nickname}}这样的点击
    • 那没有做到。该方法似乎在返回时停止。
    【解决方案2】:

    试试这个

    dosimeter_select()
    {
     let machine =  this.dosimeters.find(dosimeter => dosimeters.id===this.dosimeter_id);
      // now you have the machine object
    }
    

    【讨论】:

    • 这是访问对象的正确方法吗? this.dosimeter_model = machine.model;
    【解决方案3】:

    它应该可以工作:

    new Vue({
      el: "#app",
      data: {
        dosimeters:[
          { id: 1, name: 'foo' },
          { id: 2, name: 'bar' }
        ]
      },
      methods: {
      	dosimeterSelected (selectedDosimeter) {
        	console.log(`i doing something with dosimeter.id: ${selectedDosimeter.id}`)
        }
      }
    })
    <script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>
    <div id="app">
      <ul class="list-unstyled">
        <li v-for="dosimeter in dosimeters">
          <div>
            <label>
              <input type="radio" name="optDosimeter" :value="dosimeter.name" v-on:click="dosimeterSelected(dosimeter)">{{dosimeter.name}}
            </label>
          </div>
        </li>
      </ul>  
    </div>

    【讨论】:

      【解决方案4】:

      我做了一些更改,现在它可以工作了。 我使用了 Boussadjra Brahim 的建议:

      dosimeter_select(){
            let found= this.dosimeters.find(d=>{
                  return d.id==this.dosimeter_id
              });
      
           console.log(found.make);
           console.log(found.model);
          }
      

      我没有使用单选按钮,而是将其设置为选择下拉菜单。另外,我没有使用@click 触发该方法,而是使用了@change。

      【讨论】:

        猜你喜欢
        • 2015-07-16
        • 2021-11-18
        • 2015-09-23
        • 1970-01-01
        • 2020-09-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多