Je suis vraiment coincé sur la façon dont je travaillerais en soumettant un formulaire qui fait une demande ajax en utilisant Vue.js et vue-resource puis en utilisant la réponse pour remplir un div.
Je fais ça de projet en projet avec js/jQuery comme ceci:
vue dans la lame
{!! Form::open(['route' => 'formRoute', 'id' => 'searchForm', 'class' => 'form-inline']) !!}
<div class="form-group">
<input type="text" name="id" class="form-control" placeholder="id" required="required">
</div>
<button type="submit" class="btn btn-default">Search</button>
{!! Form::close() !!}
js/jquery
var $searchForm = $('#searchForm');
var $searchResult = $('#searchResult');
$searchForm.submit(function(e) {
e.preventDefault() ;
$.get(
$searchForm.attr('action'),
$searchForm.serialize(),
function(data) {
$searchResult.html(data['status']);
}
);
});
Ce que j'ai fait/essayé jusqu'à présent dans Vue.js:
vue dans la lame
{!! Form::open(['route' => 'formRoute', 'id' => 'searchForm', 'class' => 'form-inline']) !!}
<div class="form-group">
<input type="text" name="id" class="form-control" placeholder="id" required="required">
</div>
<button type="submit" class="btn btn-default" v-on="click: search">Search</button>
{!! Form::close() !!}
vue/js
Vue.http.headers.common['X-CSRF-TOKEN'] = document.querySelector('#token').getAttribute('value');
new Vue({
el: '#someId',
data: {
},
methods: {
search: function(e) {
e.preventDefault();
var req = this.$http.get(
// ???, // url
// ???, // data
function (data, status, request) {
console.log(data);
}
);
}
}
});
Je me demande s'il est possible d'utiliser des composants lors du traitement de la réponse pour sortir les données de réponse vers un div?
Juste pour tout résumer:
Toute aide à ce sujet serait très appréciée, merci.
Ajouter v-model="id"
sur votre saisie de texte
puis ajoutez-le à votre objet de données
new Vue({
el: '#someId',
data: {
id: ''
},
methods: {
search: function(e) {
e.preventDefault();
var req = this.$http.get(
'/api/search?id=' + this.id,
function (data, status, request) {
console.log(data);
}
);
}
}
});
Il vaut mieux supprimer v-on="click: search"
et ajouter v-on="submit: search"
sur la balise de formulaire.
method="GET"
sur votre formulaire.#someId
dans votre balisage html.Pour obtenir la valeur de l'entrée, vous devez utiliser la directive v-model
1. Vue de la lame
<div id="app">
<form v-on="submit: search">
<div class="form-group">
<input type="text" v-model="id" class="form-control" placeholder="id" required="required">
</div>
<input type="submit" class="btn btn-default" value="Search">
</form>
</div>
<script type="text/javascript">
// get route url with blade
var url = "{{route('formRoute')}}";
Vue.http.headers.common['X-CSRF-TOKEN'] = document.querySelector('#token').getAttribute('value');
var app = new Vue({
el: '#app',
data: {
id: '',
response: null
},
methods: {
search: function(event) {
event.preventDefault();
var payload = {id: this.id};
// send get request
this.$http.get(url, payload, function (data, status, request) {
// set data on vm
this.response = data;
}).error(function (data, status, request) {
// handle error
});
}
}
});
</script>
Si vous souhaitez transmettre des données au composant, utilisez les `` accessoires '', consultez la documentation pour plus d'informations.
http://vuejs.org/guide/components.html#Passing_Data_with_Props
Si vous voulez utiliser laravel et vuejs ensemble, alors passez à la caisse
https://laracasts.com/series/learning-vuejs
J'espère que ça t'aide!
J'ai utilisé cette approche et travaillé comme un charme:
event.preventDefault();
let formData = new FormData(event.target);
formData.forEach((key, value) => console.log(value, key));