v-for 不使用 vue.js 中的 html 元素

Chi*_*027 24 javascript vue.js vuejs2

我是 Vue.js 的新手

我正在准备输入元素实践的演示,这是我的代码。

HTML

<div id="inputDiv">
<form action="">
    <input type="text" v-model="first_name">
    <input type="text" v-model="last_name">
    <input type="email" v-model="email">
    <div>
        <input type="radio" :name="gender" v-model="gender" value="male">Male
        <input type="radio" :name="gender" v-model="gender" value="female">Female
    </div>
    <textarea v-model="address" id="" cols="30" rows="10"></textarea>
    <br>
    <div v-for="hobby in hobbies">
        <input type="checkbox" v-model="userHobbies" v-bind:value="hobby">{{hobby}}
    </div>
</form>
</div>
Run Code Online (Sandbox Code Playgroud)

脚本

  const inputApp = new Vue({
  el: '#inputDiv',
  data: {
    first_name: '',
    last_name: '',
    email: '',
    gender: 'male',
    address: '',
    userHobbies:[],
    hobbies: ['Reading', 'Cricket', 'Cycling', 'Hiking']
  }
  })
})
Run Code Online (Sandbox Code Playgroud)

在这里您可以看到,要显示带有标签的 Hobby,我必须与 parent 进行迭代,

添加 div 不是我想要的,如果我将v-for在输入元素中,例如:

 <input type="checkbox" v-for="hobby in hobbies" v-model="userHobbies" v-bind:value="hobby">{{hobby}}
Run Code Online (Sandbox Code Playgroud)

瘦它抛出异常[Vue 警告]:属性或方法“爱好”未在实例上定义

我的问题是有没有其他方法可以在不使用 HTML 元素的情况下在对象元素上使用v-for

Jam*_*yle 37

将它包装在一个template标签中,因为模板标签不会出现在最终呈现的 HTML 中:

<template v-for="hobby in hobbies">
    <input type="checkbox" v-model="userHobbies" v-bind:value="hobby">{{hobby}}
</template>
Run Code Online (Sandbox Code Playgroud)

或者更好的是,改进您的标记语义并使用标签标签:

<label v-for="hobby in hobbies">
    <input type="checkbox" v-model="userHobbies" v-bind:value="hobby"> {{hobby}}
</label>
Run Code Online (Sandbox Code Playgroud)


Sim*_*iel 7

您可以在 div 内添加模板,因为模板不会呈现到 DOM:

  <div id="inputDiv">
    <form action>
      <input type="text" v-model="first_name">
      <input type="text" v-model="last_name">
      <input type="email" v-model="email">
      <div>
        <input type="radio" :name="gender" v-model="gender" value="male">Male
        <input type="radio" :name="gender" v-model="gender" value="female">Female
      </div>
      <textarea v-model="address" id cols="30" rows="10"></textarea>
      <br>
      <template v-for="hobby in hobbies">
        <input type="checkbox" v-model="userHobbies" v-bind:value="hobby">
        {{hobby}}
      </template>
    </form>
  </div>
Run Code Online (Sandbox Code Playgroud)