我沿着this tutorial跟着,它工作得很好。但我想要的是不使用submit
按钮来检查或执行验证,我想要的是当我输入时,它现在验证窗体。请参阅下面的代码,或访问我上面提到的链接。如何使用输入使用VueJs和Laravel 5
代码:
路线
<?php
Route::get('/', function() {
return view('welcome');
});
Route::get('/article/create', '[email protected]');
Route::post('/article', '[email protected]');
ArticleController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ArticleController extends Controller
{
public function showArticleCreationForm(){
return view('article.create');
}
public function publish(Request $request){
$this->validate($request, [
'title' => 'required|min:3',
'body' => 'required|min:10'
]);
if ($request->ajax()) return;
return 'publish';
}
}
create.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Create Article</title>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" integrity="sha256-7s5uDGW3AHqw6xtJmNNtr+OBRJUlgkNJEo78P4b0yRw= sha512-nNo+yCHEyn0smMxSswnf/OnX6/KwJuZTlNZBjauKhTK0c+zT+q5JOCx0UFhXQ6rJR9jg6Es8gPuD2uZcYDLqSw==" crossorigin="anonymous">
<style>
.body {
height: 200px !important;
}
.error {
color: darkred;
margin-top: 5px;
display: block;
}
</style>
</head>
<body id="app">
<form @submit.prevent="submitForm" class="col-md-4 col-md-offset-4" action="{{ URL::to('/') }}/article" method="post">
<h1>Create New Article</h1>
<hr>
{!! csrf_field() !!}
<div class="form-group">
<input class="form-control title" type="text" name="title" placeholder="Title" v-model="formInputs.title">
<span v-if="formErrors['title']" class="error">@{{ formErrors['title'] }}</span>
</div>
<div class="form-group">
<textarea class="form-control body" name="body" placeholder="Content" v-model="formInputs.body"></textarea>
<span v-if="formErrors['body']" class="error">@{{ formErrors['body'] }}</span>
</div>
<button class="btn btn-primary" type="submit">Publish</button>
</form>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/1.0.14/vue.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue-resource/0.6.1/vue-resource.min.js"></script>
<script>
new Vue({
el: '#app',
data: {
formInputs: {},
formErrors: {}
},
methods: {
submitForm: function(e){
var form = e.target;
var action = form.action;
var csrfToken = form.querySelector('input[name="_token"]').value;
this.$http.post(action, this.formInputs, {
headers: {
'X-CSRF-TOKEN': csrfToken
}
})
.then(function() {
form.submit();
})
.catch(function (data, status, request) {
var errors = data.data;
this.formErrors = errors;
});
}
}
});
</script>
</body>
</html>
如果你想用onenter进行验证(这是ajax),那么你可能还想做一些去抖动。那很好。只需将文章创建与验证分离,并为验证创建额外的路线。 – dfsq
@dfsq嗨。你能明确提供你的答案吗? – Jonjie