Динамически добавлять строки в форму, используя Vue.JS - PullRequest
0 голосов
/ 01 июня 2019

Я пытаюсь создать динамическую форму, используя Vue.Пользователь нажимает кнопку добавления, и появляется еще одна строка для добавления данных.Проблема в том, что я сначала установил только 1 строку, но когда я положил v-for в div, стали появляться 3 дополнительные строки.Я не понимаю, почему это произошло?Плюс, ничего не происходит, когда я нажимаю кнопку добавления.Спасибо.

Динамическая форма Vue enter image description here

Componenet

<div class="container">
<title>exportDATA | Web to Excel</title>
<div class="mt-4">
        <div class="jumbotron bg-dark col-md-10 offset-md-1">
                <div class="card card-body bg-dark" v-for="(user,index) in users" :key="index">
                   <form>
                        <div class="row">
                            <div class="form-group col-md-3">
                                <label for="email" class="text-white">Username:</label>
                                <input type="text" class="form-control" id="username" v-model="user.username">
                            </div>
                            <div class="form-group col-md-3">
                                <label for="pwd" class="text-white">Password:</label>
                                <input type="password" class="form-control" id="password" v-model="user.password">
                            </div>
                            <div class="form-group col-md-3">
                                <label for="pwd" class="text-white">Phone Number:</label>
                                <input type="text" class="form-control" id="phone" v-model="user.phone">
                            </div>
                            <div class="form-group col-md-3">
                                <label for="pwd" class="text-white">Email</label>
                                <input type="email" class="form-control" id="email" v-model="user.email">
                            </div>
                        </div>
                    </form>
                </div>            
             <br>
                <button class="btn btn-secondary float-right" title="Click to add row"><span class="fa fa-plus-square" @click="addMoreData(index)" v-show="index == users.length-1"></span> &nbsp;Add More Data</button>
        </div>

        <div class="jumbotron bg-dark col-md-10 offset-md-1 ">
            <button class="btn btn-success col-md-6 offset-md-3 p-3"><span class="fa fa-plus-square"></span> &nbsp;Export to Microsoft Excel</button>
        </div>            
</div>
</div>

Сценарий

    export default {
    data(){
      return{   
          users:{
              username:'',
              password:'',
              email:'',
              phone:''
          }
      }
    },
    methods:{
        addMoreData(index){
            this.users.push({ 
                username: '',
                password:'',
                email:'',
                phone:''
                });
        }

    },
    mounted() {
        console.log('Component mounted.')
    }
}

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Или используйте vue-autoextra и не добавляйте кнопку, чтобы добавить что-либо в коллекцию:

Vue.config.devtools = false
Vue.config.productionTip = false
const app = new Vue({
  el: '#app',
  data () {
    return {
      users: [
        { name: 'Alice', password: 'xyz' },
      ]
    }
  },
  components: {
    Autoextra
  }
})
@import "https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.5/css/bulma.css";
.last {
  opacity: .5;
}



    
      
        
          
            
              
                
                  
                  
                
{{users}}
0 голосов
/ 01 июня 2019

Ваши данные должны быть массивом, который содержит объекты в качестве элементов. В вашем примере директива v-for выполняет итерацию свойств в одном объекте.

data(){
      return{   
          users: [{
              username:'',
              password:'',
              email:'',
              phone:''
          }]
      }
    },
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...