Vue. js v2.6.11 / vee-validate v3.2.2
У меня есть кнопка, которая выведет sh новый элемент в форму . запрос (данные в приложении vue) на событие клика. И если form.demand update, html in v-for должно быть обновлено. После того, как я заверну его в компонент vee-validate, он не будет работать. form.demand будет обновляться, но v-for не будет. Я пытаюсь поставить тот же html в тест-компонент, когда form.demand update, v-for update тоже. Я не могу понять, почему ...
следующий мой код:
HTML
<div id="content">
<test-component>
<div v-for="demand in form.demand">{{demand}}</div>
</test-component>
<validation-provider rule="" v-slot="v">
<div @click="addDemand">new</div>
<div v-for="(demand,index) in form.demand">
<div>{{demand.name}}</div>
<div>{{demand.count}}</div>
<input type="text" :name="'demand['+index+'][name]'" v-model="form.demand[index].name" hidden="hidden" />
<input type="text" :name="'demand['+index+'][count]'" v-model="form.demand[index].count" hidden="hidden" />
</div>
</validation-provider>
</div>
javascript
Vue.component('validation-provider', VeeValidate.ValidationProvider);
Vue.component('validation-observer', VeeValidate.ValidationObserver);
Vue.component('test-component',{
template: `
<div>
<slot></slot>
</div>
`
})
var app = new Vue({
el: "#content",
data: {
form: {
demand: [],
},
},
methods: {
addDemand(){
this.form.demand.push({
name : "demand name",
count: 1
})
}
})
------------ Попробуйте использовать компьютер и добавить: ключ ---------------- Это все еще не работает. Я получаю тот же результат после этого изменения.
HTML
<validation-provider rule="" v-slot="v">
<div @click="addDemand">new</div>
<div v-for="(demand,index) in computed_demand" :key="index">
<!--.........omitted.........-->
</validation-provider>
Javascript
var app = new Vue({
el: "#content",
// .......omitted
computed:{
computed_demand() {
return this.form.demand;
}
},
})
Я думаю, что нашел проблему: импорт Vue из двух разных источников. В HTML я импортирую Vue из CDN. И импортируйте vee-validate следующим образом:
vee-validate.esm. js
import Vue from './vue.esm.browser.min.js';
/*omitted*/
validator. js
import * as VeeValidate from './vee-validate.esm.js';
export { veeValidate };
main. js
// I didn't import Vue from vue in this file
import { veeValidate as VeeValidate } from './validator.js';
Vue.component('validation-provider', VeeValidate.ValidationProvider);
HTML
<head>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
<!-- at end of body -->
<script src="/static/javascripts/main.js" type="module"></script>
</body>
После того, как я исправлю это (импортируйте vee-validate из cdn или импортируйте Vue с помощью модуля ES6). Он работает, хотя все еще имеет бесконечную проблему l oop с vee-validate.
Извините, я не заметил, что импорт vue из двух разных источников.